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 mit

    if ( NULL == returnwert )
    

    weitermachen...
    danke im voraus!



  • nochwas:
    ich habs jetzt mit

    return "";
    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


Anmelden zum Antworten