strcmp gibt immer 1 zurück?
-
int clientComm(SOCKET sock) { char buf[256] = {0}; while(1) { scanf("%s",buf); printf("Eingabe:%s\n",buf); int nC = lookForCommand(buf); switch(nC) { case 1: return 0; break; case 2: printf("**"); break; default: break; } } return 0; } int lookForCommand(char cEnt[256]) { /*commands: 1->exit */ char text[256][256] = {0}; strcpy(text[0],"exit"); strcpy(text[1],"**"); //------ for(int i=0; i<10; i++) { printf("strcmp: %d",strcmp(cEnt,text[i])); if(strcmp(cEnt,text[i])) { return i; } printf("i: %d\n",i); printf("text[i]: %s\n",text[i]); } return 0; }
ihr seht doch sicher diese zeile:
printf("strcmp: %d",strcmp(cEnt,text[i]));
da bekomm ich bei fast jeder eingabe 1 und wenn ich ne gaanz lange zeile eingebe bekomm ich machmal -1 oO
hilfe bitte
-
Hmm, und was ist deine Frage?
Wenn Du zwei Strings auf Gleichheit prüfen willst, dann schreibst Du: if(strcmp(s1, s2) == 0) und NICHT if(strcmp(s1, s2)). Wenn sie nicht gleich sind, dann wird ein Wert ungleich 0 zurückgegeben, welche Auskunft dir diese Zahl gibt, steht idR in der compilerspezifischen Hilfe.
-
strcmp(s1,s2);
strcmp
-liefert >0, wenn s1 groesser als s2 ist
-liefert <0, wenn s1 kleiner als s2 ist
-liefert =0, wenn s1 gleich s2 ist.
-
So stehts bei mir im Buch:
Ist der erste Text kleiner als der zweite, dann ist er negativ (<0).
Bei identischen Zeichenketten ist er gleich 0.
Ist die erste Zeichenkette jedoch größer als die zweite, so ist er positiv (>0).Ich schreib's immer so if(!strcmp(s1,s2))
-
achsooo ich dachte es vergleicht den inhalt der strings -.- dann muss ich wohl ne funtion schreiben...
edit: ok habs verstanden ^^
-
pixartist schrieb:
achsooo ich dachte es vergleicht den inhalt der strings -.- dann muss ich wohl ne funtion schreiben...
Er vergleicht ob die beiden strings identisch sind!
-
hm noch ne frage zu dem code...
wenn ich ne 2d array hab:
array[10][20]
wie kann ich dann die länge der ersten dimension abfragen?
weil strlen(array) geht nicht!
-
printf("%d\n", sizeof(array)/sizeof(*array));
-
curry-king schrieb:
printf("%d\n", sizeof(array)/sizeof(*array));
ja, ich will ja aber nur die beschriebene länge haben und nicht die gesamtlänge...deswegen ja auch strlen!
-
hihi
die ursache ist, daß scanf() das new-line mitliest!!! wenn du also "exit" eintippst, dann liefert dir scanf() "exit\n"!!!
die änderung von
scanf("%s",buf)
auf
scanf("%s\n",buf)
sollte das problem lösen
-
hab oben mist gebaut
es muß nicht
scanf("%s\n",buf)
lauten sondern natürlich
scanf("^[\n]",buf)
hach, ist mir das peinlich
aber besser du benutzt gets(buf). gets() (oder besser noch fgets()) lesen das new-line am ende nicht mit ein und sind auch viel einfacher zu verstehen als scanf()
-
mann, hab schon wieder mist gebaut
also das mit dem nl mitlesen hab ich mit fgets() verwechselt!!!
den mist den ich geschrieben habe sofort wieder vergessen!!!
-
Konfusius, hör auf, rumzuspammen.
Hast du deine Tipps überhaupt mal ausprobiert? Gleich zwei Fehler in einem billigen Formatstring...
und so wie ich hier gucke, scheinst du dich ja riesig über scanf() zu freuen und überall deinen Senf dazuzugeben..
-
pixartist schrieb:
hm noch ne frage zu dem code...
wenn ich ne 2d array hab:
array[10][20]
wie kann ich dann die länge der ersten dimension abfragen?
weil strlen(array) geht nicht!bitte helft mir!
ich meine natürlich die beschriebene länge
-
du meinst, du willst 10 zurückkriegen?
int main() { char foo[10][20]; printf("size of whole array: %d\n", sizeof(foo)); // -> 200 printf("size of second dimension: %d\n", sizeof(foo[0])); // -> 20 printf("size of first dimension: %d\n", sizeof(foo)/sizeof(foo[0])); // -> 10 return 0; }
beschriebene länge? also wieviele der strings beschrieben sind?
geht meines wissens nur mit schleife:int i, c = 0; for (i = 0; i < sizeof(foo)/sizeof(foo[0]); ++i) c += (foo[i][0] != '\0');
prüft, ob bei einem string die terminierende null gleich am anfang ist, wenn nicht wird c inkrementiert.