[C] strcnmp co jest nie tak

0

Posiadam listę, i dobranie się do jego wyrazu można dokonać poprzez

pom->slowo

Chcę porównać wyrazy z tej listy z ciągiem podanym przeze mnie (od początku) i następnie coś zrobić z tym wyrazem np.

wyrazy z listy: lokomotywa, pies, dom, kot, komputer, lokowka, lodowka
ciąg: lok

jeśli w wyrazie z listy występuje ciąg chcę np go wyświetlić. Powinno zadziałać do: lokomotywa, lokowka.
Mój kod wygląda tak:

char  ciag[50];
int czy, dlugosc;
scanf("%s", &ciag);
dlugosc=strlen(ciag);
czy=strncmp(pom->slowo, ciag, dlugosc);
if(czy==0) funkcja;

Co jest nie tak w tym kodzie? Bo nie działa, jeśli zmienię if'a na czy==1 i dam elsa to els zadziała.

0
char  ciag[50];
int czy, dlugosc;
scanf("%s", &ciag);    // w jakim celu ampresand ?
dlugosc=strlen(ciag);
czy=strncmp(pom->slowo, ciag, dlugosc);
if(czy==0) funkcja;
0

zapisuję pod zmienną więc musi być ampersand.

http://pl.wikibooks.org/wiki/C/scanf

0

moze bys doczytal do konca...

wikipedia.pl napisał(a)

s odczytuje sekwencje znaków nie będących białymi znakami, argument powinien być wskaźnikiem na char;

Ciebie interesuja 3 ostatnie slowa.

0

Nie, nie ma go tam być. scanf potrzebuje adres bloku pamięci, do którego będzie pisał, a nie adres adresu

1

Dzieci drogie, tablica to tablica, więc jaki adres adresu? W ten sposób pobiera adres tablicy charów, ten sam adres, który uzyskałby poprzez array-to-pointer conversion. Zadanie domowe, skompilujcie i odpalcie:

char tab[666];
printf("deus %s\n", (size_t)tab == (size_t)&tab ? "ma racje" : "nie ma racji");
0

Racja <wstyd>, ale tylko w przypadku tablic na stosie, wiec lepiej uwazac na to.

0

Nie, nie w przypadku 'tablic na stosie', po prostu w przypadku tablic - globalnych, lokalnych, jakich chcesz.

0

Już sobie sam poradziłem, a tutaj offtop się zrobił na temat ampersand'a przy scanf.

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