Wątek przeniesiony 2017-11-12 23:59 z C/C++ przez kq.

Jak porównywać stringi

0

zaczynam swoja przygode z c. Powie mi ktos dlaczego to ni działa tak jak powinno? Po wprowadzeniu czegokolwiek za kazdym razem wyswietla mi z haslo jest bledne

screenshot-20171113005648.png

1

https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

W C do porównywania stringów masz strcmp/strncmp.

1

W ogóle nic w tym kodzie nie jest dobrze.

  1. Stringi w C porównuje sie przez jakieś strcpy i jego pochodne
  2. Wczytujesz dane do niezainicjalizowanego wskaźnika i to się wywali, bo wczytujesz dane do zupełnie losowego miejsca w pamięci. Zrób tam jakiś bufor.
0

Powiedziałbym, że tak to jest jak się zaczyna naukę programowania od C, ale nie wiem, czy faktycznie zaczynasz, więc tak nie powiem ;)

Czym jest char*? Czy to string? No zdecydowanie nie. Jeśli przejrzałeś jakiś lepszy kurs, to wiesz, że char* to wskaźnik na char, a nie string. I tak naprawdę tym są tzw. wysokopoziomowe stringi. To są ładnie opakowanie wskaźniki na tablicę znaków. A co się dzieje, jeśli porównujesz dwa wskaźniki? Kiedy one będą równe? Wtedy, kiedy wskazują to samo miejsce w pamięci. U Ciebie tak nie jest, a więc wskaźniki nie są sobie równe.

Wyżej miałeś już napisane, czego użyć do porównania zawartości tych tablic (stringów), więc nie będę powtarzał.

Weź też do serca uwagi @Shalom, bo masz w kodzie niezdefiniowane zachowanie (UB), czyli nie można określić, jak ten program się zachowa. Deklarujesz wskaźnik, ale nie tworzysz w pamięci miejsca na jego zawartość. Więc podane hasło przez użytkownika ląduje tak naprawdę w JAKIMŚ miejscu w pamięci. Być może nawet w miejscu, w którym leżą inne bardzo ważne dane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1