Wenn ich den Code environ=NULL
verwende, bedeutet das, dass ich die gesamte Umgebung für diesen Prozess lösche.Löschen der gesamten Umgebung
Aber ich frage mich, warum envrion=NULL
bedeutet, dass es die gesamte Umgebung für diesen Prozess löscht.
Grundsätzlich befinden sich die Umgebungsvariablen im Adressraum unter dem Stapeladressbereich des Prozesses.
So environ
Variable anzeigt, dass der Adressraum und environ=NULL
bedeutet, dass environ
nicht nur anzeigt, dass der Adressraum mehr, ich meine nicht Inhalt des Speichers zu löschen, die für Umgebungsvariablen vorhanden ist.
Aber, warum bedeutet das Löschen der gesamten Umgebung?
Wenn ich dich bekomme, hast du recht. Mit diesem Code wird die Umgebung ungültig gemacht, der Adressraum bleibt jedoch erhalten. Wie der [man] (http://www.gnu.org/software/libc/manual/html_node/Environment-Access.html) sagt: _Das letzte Element des Arrays ist ein Null-Zeiger._ – LPs
Es sollte darauf hingewiesen werden Dies ist ** spezifisch für Unix **. Die C-Sprache selbst hat keine Vorstellung von 'environ' und definiert 'getenv()', um eine implementierungsdefinierte * Umgebungsliste * zu suchen. Und sogar Unix definiert (entsprechend der Manpage), dass "extern char ** environ" "auf ein Array von Zeigern auf Zeichenfolgen zeigt" und dass "der letzte Zeiger in diesem Array den Wert NULL hat", also "environment = NULL" lädt grundsätzlich undefined Verhalten ein. – DevSolar
@ John Bollinger Ist 'clearenv()' nicht dasselbe wie 'envrion = NULL', eher' * envrion == NULL'? Wenn 'environment = NULL',' setenv() 'oder' putenv() 'dann eine neue Umgebungsliste erzeugen, um auf" name = wert "string zu verweisen. –