我在執行下面的代碼時得到輸出「ma」。如果我的理解是正確的,局部變量不會被初始化爲0.所以在這種情況下,%s在a1 [2]本身中如何找到0?難道我們無法預測這種情況下的輸出結果嗎?我總是得到這個結果,但情況可能並非總是如此?未初始化的字符數組
int main(void)
{
char a1[10];
a1[0]='m';
a1[1]='a';
a1[3]='j';
printf("%s",a1);
return(0);
}
我在執行下面的代碼時得到輸出「ma」。如果我的理解是正確的,局部變量不會被初始化爲0.所以在這種情況下,%s在a1 [2]本身中如何找到0?難道我們無法預測這種情況下的輸出結果嗎?我總是得到這個結果,但情況可能並非總是如此?未初始化的字符數組
int main(void)
{
char a1[10];
a1[0]='m';
a1[1]='a';
a1[3]='j';
printf("%s",a1);
return(0);
}
是的,除非是a1
static
注,是一個自動局部變量,這是所有由運氣。您的代碼(代碼段)由於缺少終止的null
而產生undefined behavior。
它只是恰好有下一個字節爲null
,所以它正在打印正確。它無處保證它會在下一次工作。
FWIW,%s
格式說明期望一個串和在C 串的定義是一種封端的null
陣列char
。要複製的確切措辭,
如果沒有
l
長度改性劑的存在,該參數將是指向字符類型的數組的初始元素。 [..]如果未指定精度或大於數組大小,則數組應包含空字符。
注:相關static
變量的初始化,引用C11
標準,章§6.7.9,初始化,(重點煤礦)
如果具有自動存儲對象持續時間爲未明確初始化,其值爲 不確定。如果具有靜態或線程存儲時限的對象未初始化明確,則:
[...]
如果它已經算術類型,它被初始化爲(正或無符號)零;
'a1'是如何定義的? – juanchopanza
這不是整個代碼。這給出了「編譯錯誤」。顯示如何聲明'a1'。 – vish4071
請通過添加缺少的代碼來修復您的問題。 – juanchopanza