當我運行這段代碼我得到輸出爲4.但我的字符串長度是3爲什麼它給4?Sizeof運算符使用字符串打印其長度
#include <stdio.h>
int main(void)
{
printf("%d",sizeof("abc"));
return 0;
}
當我運行這段代碼我得到輸出爲4.但我的字符串長度是3爲什麼它給4?Sizeof運算符使用字符串打印其長度
#include <stdio.h>
int main(void)
{
printf("%d",sizeof("abc"));
return 0;
}
字符串文字的類型是char [4]
。它包含字符a,b和c以及終止空字節。你回來的價值反映了這一點。
如果您想要字符串的長度,請使用strlen
。
printf("%zu\n", strlen("abc"));
注意使用%zu
格式說明,這預計size_t
類型的參數,由strlen
(和由sizeof
)作爲返回的。使用錯誤的格式說明符調用undefined behavior。
其實因爲sizeof
「運營商產生size_t
類型的結果, 和%d
不一定是正確的格式說明你可能會得到未定義行爲 。
爲什麼4?由於初始化器是一個字符串文字,它是一個字符串,並且如果它曾作爲內存中的對象存在,則確實具有空終止符。
對於C中的字符串,我會推薦使用strlen(str1)。它返回字符串的長度而不是空終止字符。
size_t strlen(const char *str)
Yaa我得到了答案 – sam1006
'sizeof'告訴你,你的數據項(在這種情況下字符串)佔用多少空間,其中包括字符串的空終止符。如果你想要字符串的長度,使用'strlen(「abc」)'。 – lurker
Ohkay明白了...... – sam1006