Vergleich zweier char arrys
-
memcmp
-
if (*var2 > *var1) {...};[/
vergleicht nur das eine Element an Adresse var2 mit dem an var1 und die sind beide '1'
Da du schon var mit 3 Elemente anlegst gehe ich mal von Strings aus
char var1[3]; char var2[3]; var1[0] =’1’; // oder strcpy(var1,"12"); var1[1] =’2’; var1[2] =’\0’; var2[0] =’1’; // oder strcpy(var2,"11"); var2[1] =’1’; var2[2] =’\0’; // Nun will ich wissen ob "11" > "12" if ((strcmp(var2,var1) > 1) {...};
oder
char var1[] = "12"; char var2[] = "11"; // Nun will ich wissen ob "11" > "12" if ((strcmp(var2,var1) > 1) {...};
Bedenke aber dass du Texte vergleichst, da ist "99" > "100".
-
char var1[3]; char var2[3]; var1[0] ='1'; var1[1] ='2'; var2[0] ='1'; var2[1] ='1'; /* Nun will ich wissen ob 11 > 12 */ if( memcmp(var1,var2,2)<0 ) puts("kleiner"); else if( memcmp(var1,var2,2)>0 ) puts("groesser"); else puts("gleich");
oder kürzer:
char var1[]="12",var2[]="11", *s[]={"kleiner","gleich","groesser"}; puts( s[memcmp(var1,var2,2)+1] );
-
Hi
Super, vielen Dank.
memcmp()....
hat super funktioniert...
Gruß
-
Wutz schrieb:
char var1[]="12",var2[]="11", *s[]={"kleiner","gleich","groesser"}; puts( s[memcmp(var1,var2,2)+1] );
Da haste dir gleich wieder schön undefiniertes Verhalten eingehandelt. Der Betrag des Rückgabewertes von memcmp ist nicht spezifiziert; da kann auch mal -1000 oder 1000 rauskommen (vgl. C99 7.21.4.1 (3)).
-
Ein
!!
löst das Problem.
-
!!-100 == !!100.
-
seldon schrieb:
!!-100 == !!100.
Sorry. Ich habe nicht sehr gründlich gelesen. Ich dachte, es geht dem Threadstarter um Gleichheit.
-
char var1[]="12",var2[]="11", *s[]={"kleiner","gleich","groesser"}; int val; puts( s[((val = memcmp(var1,var2,2)) > 0) - (val < 0) + 1] );
-
puts( s[(val = memcmp(var1,var2,2)) > 0 ? 2 : !val] );