int main()
{
char a[7] = "Network";
return 0;
}
A Stringliteral in C ist intern mit einem NUL-Zeichen beendet. Daher sollte der obige Code einen Kompilierungsfehler ergeben, da die tatsächliche Länge des Zeichenfolgeliterals Network
8 ist und nicht in ein char[7]
Array passen kann.Warum erlaubt gcc char-Array-Initialisierung mit String-Literal größer als Array?
Aber gcc (auch mit -Wall
) auf Ubuntu kompiliert diesen Code ohne Fehler oder Warnung. Warum lässt gcc dies zu und meldet es nicht als Kompilierungsfehler?
gcc gibt nur eine Warnung aus (immer noch kein Fehler!), Wenn die Char-Array-Größe kleiner als das String-Literal ist. Zum Beispiel, es warnt auf:
char a[6] = "Network";
[Verwandte] Visual C++ 2012 gibt einen Kompilierungsfehler für char a[7]
:
1>d:\main.cpp(3): error C2117: 'a' : array bounds overflow
1> d:\main.cpp(3) : see declaration of 'a'
Vielleicht kompilieren Sie den Code als C mit gcc und als C++ in Visual Studio. Sie sind nur scheinbar ähnliche Sprachen. – nos
@nos: Ja, das erklärt das Verhalten! Ich denke, das ist einer dieser kleinen Unterschiede im C-ähnlichen Code zwischen C und C++. –
Es wird ein Fehler mit g ++ sein, wenn ich mich richtig erinnere – fayyazkl