Ist argv[0] garantiert der Name der ausführbaren Datei?
Bei der Arbeit mit C- oder C-Anwendungen wird oft davon ausgegangen, dass die Das erste an main() übergebene Argument (argv[0]) stellt den Namen der ausführbaren Datei dar. Diese Annahme trifft jedoch möglicherweise nicht immer zu.
Die Definition des Standards
Gemäß der ISO-C11-Norm:
„Wenn der Wert von argc größer als Null ist, stellt die Zeichenfolge, auf die argv[0] zeigt, den Programmnamen dar; argv0 muss das Nullzeichen sein, wenn der Programmname nicht auf dem Host verfügbar ist Umgebung."
Diese Anweisung stellt klar, dass argv[0] nur den Programmnamen enthalten sollte, wenn der Name in der Host-Umgebung verfügbar ist. Darüber hinaus handelt es sich möglicherweise nicht um eine exakte Übereinstimmung, sondern eher um eine Darstellung.
Implementierungsdefinierte Werte
Der Standard gibt außerdem an, dass die Werte in argv[0] sind durch die Implementierung definiert. Dies bedeutet, dass verschiedene Betriebssysteme oder Umgebungen möglicherweise unterschiedlich mit der Population von argv[0] umgehen.
Auf UNIX-basierten Systemen können Aufrufe der Exec-Familie beispielsweise argv[0] beliebige Werte zuweisen. Der Standard verlangt jedoch, dass die Implementierung dieses Verhalten dokumentiert.
Schlussfolgerung
Daher ist es zwar eine übliche Konvention, dass argv[0] den Namen der ausführbaren Datei enthält, Dies wird durch die C- oder C-Standards nicht gewährleistet. Die Implementierung kann den Inhalt von argv[0] variieren, solange sie sein Verhalten dokumentiert.
Das obige ist der detaillierte Inhalt vonIst argv[0] immer der ausführbare Name in C/C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!