Brauche Hilfe: malloc&strcmp
-
Bin dabei ein Programm zu programmieren, bei dem man Strings einliest,vergleicht und ausgegeben wird welcher String alphabetisch groesser oder kleiner ist. Mit malloc soll Speicher fuer die Strings besorgt werden.
Ich weiss aber nicht wie ich mit malloc arbeiten soll und wie ich ausgeben kann welcher String alphabetisch groesser oder kleiner ist...
Mein Programm schaut bisher so aus:#include <stdio.h>
#include <stdlib.h>int main()
{
char *str1;
char *str2;printf("Bitte geben Sie einen String ein : \n");
fgets(str1,100,stdin);printf("Bitte geben Sie einen zweiten String ein : \n");
fgets(str2,100,stdin);if ((strcmp(str1,str2))==0)
printf("Die beiden Strings sind gleich \n");
else
printf("Die beiden Strings sind nicht gleich \n");printf("%s%s \n",str1,str2);
return 0;
}kann mir vielleicht jemand weiterhelfen?
-
So vielleicht
#include <stdio.h> #include <stdlib.h> int main() { char *str1 = malloc(101); char *str2 = malloc(101); int cmp = 0; printf("Bitte geben Sie einen String ein : \n"); fgets(str1,100,stdin); printf("Bitte geben Sie einen zweiten String ein : \n"); fgets(str2,100,stdin); cmp = strcmp(str1,str2); if ( cmp == 0 ) printf("Die beiden Strings sind gleich \n"); else { if ( cmp < 0 ) printf("String 1 ist kleiner als String 2\n"); else printf("String 1 ist groesser als String 2\n"); } printf("%s%s \n",str1,str2); return 0; }
Kurt
-
Die Länge des Buffer sollte man bei fgets() komplett angeben (nicht Buffergröße-1). Der Platz für die \0 wird von fgets() berücksichtigt.
-
ZuK schrieb:
printf("String 1 ist kleiner als String 2\n");
else
printf("String 1 ist groesser als String 2\n");kleiner? grösser? du meinst länger oder kürzer.
-
@ TactX: stimmt. war zu faul um nachzusehen und wollte auf nummer sicher gehen
@ ANSICThe function strcmp() returns a positive integer if string s1 is lexically greater than string s2; zero if the two strings are identical; and a negative integer if string s1 is lexically less than string s2.
Kurt
-
Vielen Dank fuer eure Hilfe
-
char *str1 = malloc(101); char *str2 = malloc(101);
was machen wir wenn ein char irgendwann mal 2 Byte groß is? Will sagen die länge des einlesbaren strings halbiert sich.
btw: willst den speicher nicht wieder freigen?
-
THE_FreaK schrieb:
char *str1 = malloc(101); char *str2 = malloc(101);
was machen wir wenn ein char irgendwann mal 2 Byte groß is?
Dann schreiben wir halt
char *str1 = malloc(101*sizeof(char));
Ist zwar exakt dasselbe aber egal...
*scnr*
-
aber gute Idee
habs gleich geaendert
Danke euch
den Speicher freigeben...mit free()?wie genau geht das?
-
free(str1); free(str2);
Bei sowas bietet es sich aber an eine Referenz zu lesen
-
Danke!Habs ans Ende des Programms geschrieben
(gibts einen errötenden smilie noch irgendwo?)