strcpy: Segmentation fault (core dumped)
-
Hallo,
Das habe ich vor int main():
static char configvalue[512];
Das hier ist in einer sep. Funktion:
char *result=NULL;
jetzt möchte ich folgendes machen:
strcpy(configvalue, result);
Das Funktioniert auch, allerdings nur beim ersten Mal, beim zweiten mal kommt segfault..
Wieso? Wie kann ichs beheben?
Vielen Dank,
gruss hampelmann
-
Wenn ich das richtig sehe: Beim ersten Mal liest Du von NULL und bügelst damit configvalue (was auch ein Pointer ist). Beim zweiten Aufruf versuchts Du dann auf NULL zu schreiben. Dann sachter "das kann ich nicht leiden".
Edit:
Wenn Du nur vorhast, configvalue zu initialisieren, bentze menset.Noch'n Edit:
configvalue[0]='\0'
tuts auch.
-
so geht das aber:
#include <stdio.h> #include <string.h> #include <stdlib.h> static char test[10]; int main(int argc, char *argv[]) { char *foo; foo=(char *)malloc(sizeof(char)); strcpy(test,foo); strcpy(test,foo); return 0; }
Muss man nicht für *foo speicher reservieren?
-
hampelmann schrieb:
Das Funktioniert auch, allerdings nur beim ersten Mal, beim zweiten mal kommt segfault..
Wieso?
Du hast nun kennen gelernt, was undefiniertes Verhalten bedeutet.
strcpy greift auf die Speicherstellen beider Parameter zu, dereferenziert sozusagen. Und einen Nullzeiger zu dereferenzieren verursacht undefiniertes Verhalten. Das solltest du unbedingt vermeiden.Manfred Schmidtke schrieb:
Wenn ich das richtig sehe: Beim ersten Mal liest Du von NULL und bügelst damit configvalue (was auch ein Pointer ist). Beim zweiten Aufruf versuchts Du dann auf NULL zu schreiben. Dann sachter "das kann ich nicht leiden".
Käse.
curry-king schrieb:
Muss man nicht für *foo speicher reservieren?
Ja, nur nicht zwangsläufig dynamisch.
-
hampelmann schrieb:
Hallo,
Das habe ich vor int main():
static char configvalue[512];
Das hier ist in einer sep. Funktion:
char *result=NULL;
jetzt möchte ich folgendes machen:
strcpy(configvalue, result);
Das Funktioniert auch, allerdings nur beim ersten Mal, beim zweiten mal kommt segfault..
Wieso? Wie kann ichs beheben?
Vielen Dank,
gruss hampelmann
Also mich wundert es, dass es überhaupt zum ersten Mal funktionieren, denn welchen Sinn hat es einen NULL Pointer zu kopieren? Was bitte schön soll dabei kopiert werden?
Manfred Schmidtke schrieb:
Noch'n Edit:
configvalue[0]='\0'
tuts auch.
Quatsch! Nein, das ist nicht die Ursache, außerdem benutzt er strcpy und nicht strcat.
-
supertux schrieb:
Manfred Schmidtke schrieb:
Noch'n Edit:
configvalue[0]='\0'
tuts auch.
Quatsch! Nein, das ist nicht die Ursache, außerdem benutzt er strcpy und nicht strcat.
Keine Ahnung wie du auf strcat kommst. Aber falls hampelmann vorhat, einen leeren String zu initialisieren, dann ist der Vorschlag von Manfred tatsächlich überflüssig, da static Variablen sowieso mit null initialisiert werden.
-
groovemaster schrieb:
Keine Ahnung wie du auf strcat kommst. Aber falls hampelmann vorhat, einen leeren String zu initialisieren, dann ist der Vorschlag von Manfred tatsächlich überflüssig, da static Variablen sowieso mit null initialisiert werden.
weil man mit strcat schon buffer[0]=0; machen muss.
char buffer[200]; buffer[0]=0; strcat(buffer, "hallo");
In diesem Fall notwenidg, aber bei strcpy nicht, weil strcpy nicht schaut, ob dest ein 0-terminierendes Strings ist. strcpy kopiert es einfach.
-
Danke vielmals, aber es funzt immernoch nicht, wenn ich das *result=NULL zu '\0' umändere... vor dem kopieren configvalue[0]=0; oder ='\0' mache, es funktioniert noch nix :-((
gruss hampelmann
-
hampelmann schrieb:
Danke vielmals, aber es funzt immernoch nicht, wenn ich das *result=NULL zu '\0' umändere... vor dem kopieren configvalue[0]=0; oder ='\0' mache, es funktioniert noch nix :-((
gruss hampelmann
du benutzt strcpy auch völlig falsch. Außerdem, welcher ist der Sinn einen NULL-String (NULL Pointer) zu kopieren? Ich verstehe nicht, was du da machen willst.
-
hi,
In result befindet sich einen string. der wird auch per strcpy reinkopiert. Jeztt will ich schliesslich, dass ich der Wert der Variable auch in der main benützen kann.
char xxx
return "balbla"
funzt irgendwie auch nicht.
gruss hampelmann
-
poste deinen Code.
-
also was bis jetzt vermutet wurde kanns imho nicht sein. laß uns mal den quelltext sehen.