sprintf ->Segmentation Fault
-
Ich habe bereits den Beitrag in der FAQ und das Manpage gelesen, aber es klappt einfach nicht. Ich probier da jetzt schon ne ganze Weile dran rum aber ich find den Fehler einfach nicht. Wenn ich die Zeile mit sprintf auskommentier gibts kein SegFault
(Hab den pointer bzw chararray schon mit & geschrieben ( wie in FAQ) aber da kommt sofort ein Error beim kompilieren)
Hoffe jemand kann helfen.
Gruß HiFishvoid order_by_group(int (*user)[3],int length,char (*group)[9]) { FILE *fp; char* s={"qstat -f "}; char str[200]; char platz[7]; int ztalp=0,abort=0; user[0][0]=60133; ztalp=user[0][0]; sprintf(platz,"%6d",ztalp); strcat(s,platz); strcpy(platz,""); fp=popen(s,"r"); while(!feof(fp)&&!abort) { fgets(str,200,fp); if(strstr(str,"Output_Path = ")) { printf("%s",str); abort=1; } } }
-
mach doch mal 'platz' grösser. 100 oder so. brauchst keine bedenken zu haben, dass das speicherplatzverschwendung wäre
-
Dein Problem ist nicht das sprintf, sondern das strcat:
char* s="qstat -f "; ... strcat(s,platz);
s zeigt auf ein String-Literal, das der Compiler üblicherweise schreibgeschützt unterbringt. Wenn du dort etwas reinschreiben willst, kracht es.
-
Ich seh net was des bringen sollte da die Zahl in user max 6 Zeichen lang ist.
Habs aber trotzdem probiert immernoch SegFault.
-
mach mal "char s[20]="qstat -f "; anstelle der Pointer-Deklaration.
-
ja jetzt geht es. Danke!
-
bitte nutze immer snprintf freund
-
Wie ich schon oben sagte, war das Problem NICHT das printf (zumindest hier nicht), sondern der Versuch, einen konstanten Speicherbereich zu verändern (auf den der char-Pointer gezeigt hat).
-
CStoll schrieb:
Wie ich schon oben sagte, war das Problem NICHT das printf (zumindest hier nicht), sondern der Versuch, einen konstanten Speicherbereich zu verändern (auf den der char-Pointer gezeigt hat).
Deswegen ist der Hinweis auf snprintf() trotzdem gut angebracht, oder meinst du was anderes?
-
AJ schrieb:
CStoll schrieb:
Wie ich schon oben sagte, war das Problem NICHT das printf (zumindest hier nicht), sondern der Versuch, einen konstanten Speicherbereich zu verändern (auf den der char-Pointer gezeigt hat).
Deswegen ist der Hinweis auf snprintf() trotzdem gut angebracht, oder meinst du was anderes?
Ja, daß dieses Problem mit snprintf() genauso aufgetreten wäre.
-
CStoll schrieb:
AJ schrieb:
CStoll schrieb:
Wie ich schon oben sagte, war das Problem NICHT das printf (zumindest hier nicht), sondern der Versuch, einen konstanten Speicherbereich zu verändern (auf den der char-Pointer gezeigt hat).
Deswegen ist der Hinweis auf snprintf() trotzdem gut angebracht, oder meinst du was anderes?
Ja, daß dieses Problem mit snprintf() genauso aufgetreten wäre.
Es hat ja keiner gesagt, dass es DIE Problemlösung ist. Es ist nur ein Verbesserungsvorschlag (auch wenn es nicht unbedingt so geklungen hat ;)).