Kłopoty z tablicami łańcuchowymi w code blocks

Kłopoty z tablicami łańcuchowymi w code blocks
AP
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Polska
  • Postów:134
0

Witam, gdy tworzę dwa łańcuch znaków(2 elementowe) bezpośrednio po sobie i wczytuje przy pomocy fread pierwszy z nich a na wejściu dam wyraz 5 znakowy to co powinno się stać? Code blocks po wypisaniu ich wyświetla mi pierwszy 5 znakowy ten co podałem a 2 wyświetla 2 krzaczki i ten pierwszy łańcuch. Czy nie powinno być tak że pierwszy wyświetlił się ten co podałem na wejście, a drugi to powinien być fragment tego pierwszego? Mogłem napisać jakieś bzdury bo jestem już śpiący :-)


Jestem programistą, web developerem. Interesuję się programowanie w językach C++, C#, TypeScript, Assembly, tworzeniem aplikacji sieciowych w ASP.NET, projektowaniem stron i aplikacji w HTML5, CSS3, XAML, oraz wyszukiwaniem wszelakiego typu luk w zabezpieczeniach aplikacji sieciowych, webowych i nie tylko (XSS, SQL-Injection, CSRF itp.).
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Stos działa w drugą stronę ;) Wczytaj sobie ten ciąg do tego drugiego stringa. Poza tym mieszasz trochę rozmiary. C-string musi mieć o 1 znak więcej i na końcu \0 zebyś go mógł dobrze wypisać (bo przy wypisywaniu wypisuje ci aż nie trafi na 0, więc jak 0 nie będzie to wypisze co kupę krzaków)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:15 dni
1

Unikaj mazania po pamięci np tak:

Kopiuj
char A[3],B[3];
cin>>setw(2)>>A>>setw(2)>>B;
scanf("%2s%2s",A,B);

Rozważanie skutków mazania po pamięci nie ma sensu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Shalom
Chyba ze chcesz pokazać czy referencja jest wskaźnikiem? :P
_13th_Dragon
Tamto - świadome nałożenie kilku UB, zupełnie co innego ponieważ wiem gdzie i co maże.
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:6 miesięcy
0

Mógłbyś podać kod, bo nie potrafię sobie tego zwizualizować?

Jeśli masz coś w rodzaju:

Kopiuj
char a[2], b[2];
fread(a, 1, 5, f);

to jest to UB (tzn. błędny kod, może działać tak, może inaczej, a najczęściej nie działa wcale).

Kopiuj
char *a = "ab", *b = "cd";
fread(a, 1, 5, f);

to tym bardziej jest to UB.

Ale może źle sobie wyobrażam o co chodzi.

msm
już 40 minut przeglądam forum? :O Ech, jak odpisywałem w wątku to byłem pierwszy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.