Wie wird ein in function erstelltes char-Array zurückgegeben?

Ich programmiere schon eine ganze Weile schlecht und habe es erst richtig gemerkt. Ich habe zuvor viele Funktionen erstellt, die Zeichenfolgen als Zeichen-Arrays (oder zumindest als Zeiger auf diese) zurückgeben.

Neulich hat jemand darauf hingewiesen, dass bei der Rückgabe meiner Funktionen die Zeichen-Arrays, auf die meine Funktionen zeigen, nicht mehr gültig sind und ich im Wesentlichen jetzt auf ein zufälliges Speicherbit verweise (ein unangenehmer baumelnder Zeiger).

Ich habe dies eine Weile nicht wirklich bemerkt, da die char-Arrays bei der Ausgabe an die Konsole nicht beschädigt zu sein schienen (wahrscheinlich, weil es keine Zeit gab, diese Daten zu überschreiben). Dies ist mir jedoch aufgefallen, als ich einen Zeichenfolgenpuffer (char array) zurückgegeben habe, der durch Lesen der häufig beschädigten seriellen Schnittstelle generiert wurde.

So, wie soll ich das am besten machen?

Mein fehlerhafter Code lautet wie folgt:

#include <cstdlib>
#include <iostream>

using namespace std;

char* myBadFunction(){
    char charArray[] = "Some string\n";
    char* charPointer = charArray;
    return charPointer;
}


int main(int argc, char** argv) {

    cout << myBadFunction();

    return 0;
}

Ich verstehe, dass ich vor dem Aufrufen der Funktion möglicherweise Speicher im Programm zuweisen oder eine globale Variable erstellen sollte, um den zurückgegebenen String einzufügen. Wenn meine aufgerufene Funktion jedoch von vielen verschiedenen Programmen verwendet wird, wann sollte sie die Größe des Puffers kennen im Voraus übergeben und wann sollte dieser Speicher gelöscht werden?

Der folgende Code macht auch nicht das, was ich will:

#include <cstdlib>
#include <iostream>

using namespace std;

void fillArray(char* charPointer){
    char charArray[] = "Some string\n"; // Create string
    charPointer = charArray; // Not correct, want to fill predefined array with created string
    return;
}


int main(int argc, char** argv) {

    char predefinedArray[50] = {0};
    fillArray(predefinedArray);
    cout << predefinedArray;

    return 0;
}

Ich möchte das Array füllen, auf das der analysierte Zeiger zeigt, aber dies ist im obigen Code nicht der Fall.

Auch wann sollte ich den neuen Befehl [] verwenden, um mein Array zu erstellen? wird es gebraucht und wann soll ich delete [] drauf anrufen.

Vielen Dank dafür, es ist offensichtlich sehr grundlegend, aber etwas, was ich schon eine Weile falsch gemacht habe.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage