這是我的示例代碼。strlen給出意想不到的輸出C
#include <stdio.h>
#include <string.h>
int main() {
char a[3] = { 'H', 'E', 'L', 'L', 'O', '\0' };
printf("Length is %zd ", strlen(a));
}
我知道這會產生以下警告!現在
test.c:5:26: warning: excess elements in array initializer
char a[3] = {'H','E','L','L','O','\0'};
我的問題是,如果我指定的大小a[6]
或任何比實際尺寸我的輸出將更大。
爲char a[100] = {'H','E','L','L','O','\0'};
輸出:
Length is 5
爲char a[10] = {'H','E','L','L','O','\0'};
輸出:
Length is 5
任何超過數組大小等於或大於我得到正確的輸出。
但是,當我給什麼小於實際尺寸總是我越來越 作爲輸出。
爲char a[5] = {'H','E','L','L','O','\0'};
或a[4]
或a[3]
或a[2]
它總是
Length is 6
雖然對
char a[1] = {'H','E','L','L','O','\0'};
是Length is 1
。
這是什麼原因?任何詳細的解釋是值得歡迎的。
未定義的行爲? –
這個警告不會讓編譯器編寫者感覺更好,你知道。你不知道爲什麼*「數組初始值設定項中的多餘元素」*可能是一個問題? – StoryTeller
@s_vishnu是的。我得到9. –