Rückgabe eines lokalen Zeigers in C

  •  const char* returnStr()
    {
        char time[40] = {"France"};
        char* time1;
    
        time1 = time;
    
        return time1;
    }
    
    int main(int argc, char* argv[])    {
        printf ("return String is %s\n",returnStr());
    }
     

    Dieser Code gibt einige Junk-Zeichen zurück. Wird das const char* nicht ausreichen, um den lokalen Zeichenzeiger zurückzugeben? Muss ich auch statisch in der Funktion verwenden?

    22 November 2011
    James
3 answers
  • Muss ich auch statisch in der Funktion verwenden?

    Ja. Das const ist nur ein Qualifier für den Rückgabewert und signalisiert den Aufrufern von returnStr, dass sie das Ergebnis der Funktion nicht ändern sollen. Es ändert nicht den temporären Charakter von time.

    22 November 2011
    Fred Foo
  • Wenn die returnStr-Funktion beendet wird, wird der Stack-Frame freigegeben. Auf alle lokalen Zeiger, auf die verwiesen wird, handelt es sich nun um Zufallsdaten. Wenn Sie einen Zeiger zurückgeben möchten, müssen Sie ihn auf dem Heap reservieren, z. B. mit malloc.

    22 November 2011
    barrucadu
  • Das time Objekt ist nur solange vorhanden, bis returnStr ausgeführt wird. Sobald es zu der Funktion zurückkehrt, die es aufgerufen hat, ist es weg und jeder Zeiger darauf ist ungültig. Kurz gesagt, in C können Sie kein Array von einer Funktion zurückgeben, Sie können nur einen Zeiger auf einen zurückgeben. Aus diesem Grund weisen Standard-C-Funktionen der Bibliothek keine Zeichenfolgen zu. Sie müssen eine Zeichenfolge übergeben und angeben, wie groß sie ist, und sie wird sie füllen oder einen Fehler ausgeben.

    22 November 2011
    orbitz