NULL und SegFault
-
hallo wiedermal
ich hab eine frage:
ich lass mir von einer funktion entweder einen char* oder NULL zurückgeben.
das ergebnis will ich in ein char[] speichern. daher weise ich das returnergebnis mittels strcpy zu:char returnwert[]; strcpy(returnwert, funktionDieWasZurückliefert());
wenn aber NULL zurückkommt, krieg ich ein segfault. kann mir wer sagen, wie ich das am besten mache?
ich möchte dann gerne mitif ( NULL == returnwert )
weitermachen...
danke im voraus!
-
nochwas:
ich habs jetzt mitreturn ""; und vergleich dann mit 0 == strcmp("", returnstring)
ist das in ordnung oder wärs anders schöner?
thx
-
hephaistos6 schrieb:
char returnwert[]; strcpy(returnwert, funktionDieWasZurückliefert());
Das geht schonmal nicht. Du kannst erstens kein Array ohne Größenangabe anlegen, und zweitens kannst du Arrays nicht zurückgeben.
wenn aber NULL zurückkommt, krieg ich ein segfault. kann mir wer sagen, wie ich das am besten mache?
Stell ich mich mal dumm und ignorier die beiden Probleme von oben. Was spricht gegen das:
char *temp = funktionDieWasZurückliefert(); if (temp == NULL) returnwert = NULL; else strcpy(returnwert, temp);
?
Ach ja, returnwert muss dafür natürlich ein Pointer sein.
-
Bashar schrieb:
hephaistos6 schrieb:
char returnwert[]; strcpy(returnwert, funktionDieWasZurückliefert());
Das geht schonmal nicht. Du kannst erstens kein Array ohne Größenangabe anlegen, und zweitens kannst du Arrays nicht zurückgeben.
jo, sorry -> hab ich nur plain hier reingeschrieben. hab ich natürlich nicht so
[quote]
char *temp = funktionDieWasZurückliefert(); if (temp == NULL) returnwert = NULL; else strcpy(returnwert, temp);
hmmm
buon idea.... thx!!
eine kl. frage noch: wie kann ich ein char[] "nullsetzen"?? dh: dass es keinen Wert mehr beinhaltet? mit einer for schleife durchgehen kanns ja auch nicht sein oder?
thx
-
hephaistos6 schrieb:
eine kl. frage noch: wie kann ich ein char[] "nullsetzen"?? dh: dass es keinen Wert mehr beinhaltet?
Es gibt sowas wie "keinen Wert" nicht, das hängt immer davon ab, wie die Werte interpretiert werden. Falls da ein Nullterminierter String drin steht, reicht es z.B., das erste Zeichen auf '\0' zu setzen. U.U. musst du auch das ganze Array mit '\0' überschreiben. Falls es ein Pointer ist, kannst du den auch auf NULL setzen.
-
aha ok...
naja, ich habs dann also mit einer for-schleife von hinten nach vorne einfach immer \0 reinschreiben...
thx