Sie scheinen verwirrt. Vergessen Sie, was Sie über Zeiger wissen. Lass uns mit Ints arbeiten.
int x;
x = rand(); // Let us consider this the "old value" of x
x = getchar(); // Let us consider this the "new value" of x
Gibt es eine Möglichkeit für uns, den alten Wert abzurufen, oder hat es „durchgesickert“ aus unserer Sicht? Nehmen wir einmal an, Sie sollten das Betriebssystem wissen lassen, dass Sie mit dieser Zufallszahl fertig sind, damit das Betriebssystem einige Bereinigungsaufgaben ausführen kann.
Ist der alte Wert für die Generierung des neuen Werts erforderlich? Wie kann es sein, wenn getchar
x nicht sehen kann?
Wenden wir uns nun den Code betrachten:
char *variable;
variable = (char*) malloc(sizeof(char*)); // Let us consider this the "old value" of variable
variable = strdup(word); // Let us consider this the "new value" of variable
Gibt es für uns eine Möglichkeit, den alten Wert abzurufen, oder es „durchgesickert“ aus unserer Sicht hat?Es wird erwartet, dass Sie das Betriebssystem wissen lassen, wenn Sie mit dem Speicher malloc
ed fertig sind, indem Sie free(variable);
anrufen.
Ist der alte Wert für die Generierung des neuen Werts erforderlich? Wie kann es sein, wenn strdup
Variable nicht sehen kann?
FYI, hier ist ein Beispiel dafür, wie strdup umgesetzt werden könnten:
char *strdup(const char *original) {
char *duplicate = malloc(strlen(original) + 1);
if (duplicate == NULL) { return NULL; }
strcpy(duplicate, original);
return duplicate;
}
Sie sollten nicht verwenden 'new' als Variablenname –
@ Ale-batt Der Variablenname jedoch in C völlig in Ordnung ist, kann ich verstehe, dass der C++ - Compiler es nicht mag. Diese Frage wird mit C markiert. Daher sehe ich kein Problem. – hetepeperfan