Strings vergleichen mit strcmp
-
Ja, ich weiss, warum
1. Es muss
int main(int argc, char *argv[])...
heissen, denn argv ist ein 2-dimensionales char-Array
2. Solange du den Inhalt, worauf char *txt zeigt, nicht veränderst, ist das ok.
Aber Vorsicht. Willst du ein Zeichen ändern, ist das weitere Verhalten
undefiniert. Deshalb empfehle ich dir zu schreiben:char txt[]="txt"
Der Compiler reserviert dir jetzt 3 Zeichen + '\0'. Der Inhalt kann verändert werden und führt zu keinen weiteren Problemen.
Kannst aber auch gleich
strcmp("txt",argv[1])
schreiben
-
Habe das jetzt so geschrieben wie du gesagt hast.
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv) { char *txt="txt"; if(strcmp(txt, argv[1])==0) printf("txt"); else printf("nicht txt"); return 0; }
Jetzt bekomme ich den Fehler
Name1.c: In function
main': Name1.c:9: warning: passing arg 2 of
strcmp' makes pointer from integer without a cast
-
Hmmm, das mit main hab ich ja komplett übersehen
-
int main(int argc, char *argv[])
oder
int main(int argc, char **argv[])
also so:
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char txt[]="txt"; if(strcmp(txt, argv[1])==0) printf("txt"); else printf("nicht txt"); return 0; }
die stdlib.h brauchst du hier aber noch nicht.
Erst bei malloc
-
Klar,
Dankeschön. So ein dummer Fehler! Danke, jetzt kann ich endlich weiter arbeiten. Gott sei Dank sehen 8 Augen mehr als 2.
Danke curry-king
-
curry-king schrieb:
int main(int argc, char *argv[])
oder
int main(int argc, char **argv[])
Da ist aber ein Unterschied!
Du meintest wohl als Alternative:int main(int argc, char **argv)
-
AJ schrieb:
curry-king schrieb:
int main(int argc, char *argv[])
oder
int main(int argc, char **argv[])
Da ist aber ein Unterschied!
Du meintest wohl als Alternative:int main(int argc, char **argv)
Natürlich
-
helpme schrieb:
Ich bekomme aber einen Segmention fault. Weiß jemand warum????
Abgesehen von der falschen Definition von int main, deswegen
char *typ; sprintf(typ, "%s", argv[1]);
char *typ; ist nur ein Zeiger auf niergendswo, wie willst du dort etwas schreiben, wo es keinen Platz gibt?
char typ[200]; sprintf(typ, "%s", argv[1]);
würde gehen, allerdings, wenn strlen(argv[1]) < 200
-
Irgendwie will es nicht ganz so wie ich. Also, das mit dem strcmp klappt ja jetzt wunderbar. Habe jetzt genau das selbe Problem mit rename.
Ich will den alten und neuen namen über argv[] einlesen und dann halt einfach umbennen und dann erhalte ich wieder nen Segmention Fehler???
Wahrscheinlich stelle ich mich wieder nur blöd an.
Hier mein Code:
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]) { char newname[50]; char oldname[50]; int rc; sprintf(oldname, "%s", argv[1]); sprintf(newname, "/home/sxh/Projekt/%s.%s.%s", argv[2], argv[3], argv[4]); if(rename( oldname, newname )==0) rc=0; else rc=1; printf("%s", rc); return 0; }
-
Ich nehme an, deswegen:
sprintf(newname, "/home/sxh/Projekt/%s.%s.%s", argv[2], argv[3], argv[4]);
vielleicht sind 50 Zeichen zu wenig.
An welcher Stelle bekommst du das segfault? Was wird ausgeführt und was nicht?Es könnte auch sein, dass die argc nicht so übereinstimmen, wie du es willst. Wie rufst du das Programm auf? Ich würde auf jeden Fall davor testen, wie viel argc ist und dementsprechend handeln.