我正在學習C語言,我遇到了這個奇怪的字符串問題。我正在玩弄字符串和不同的方式來聲明字符串並查看其內容。C中的字符串文字以%?結尾
當使用char數組聲明一個字符串,然後打印該數組的每個元素時,它會產生預期的輸出。它打印每個字符,以空字符結束。
當聲明一個字符串字面值並打印出結果數組的內容時,我注意到字符被添加到空字節後面的字符串中。
%
從哪裏來?
代碼如下。我通過編譯代碼; $ gcc nameStuff.c -o nameStuff
我在我自己的Mac機器上以及學校的遠程Linux服務器上都試過這個,並且兩次都得到了相同的輸出。
下面的代碼:
char myName[] = {72, 97, 121, 100, 101, 110, 0}; // my name in ASCII values
char *name = "Hayden"; // my name as string literal
printf("%s, size: %ld\n", myName, sizeof(myName)); //
printf("%s, size: %ld\n", name, sizeof(name));
int length1 = sizeof(myName);
int length2 = sizeof(name);
int i;
// prints char value of each element in ascii array
for (i = 0; i < length1; i++) {
printf("%c,", myName[i]);
}
puts("");
// prints int value of each element in ascii array
for (i = 0; i < length1; i++) {
printf("%d,", myName[i]);
}
puts("\n");
// prints char value of each element in string literal array
for (i = 0; i < length2; i++) {
printf("%c,", name[i]);
}
puts("");
// prints int value of each element in string literal array
for (i = 0; i < length2; i++) {
printf("%d,", name[i]);
}
puts("");
下面是輸出:
Hayden, size: 7
Hayden, size: 8
H,a,y,d,e,n,,
72,97,121,100,101,110,0,
H,a,y,d,e,n,,%,
72,97,121,100,101,110,0,37,
我問我的教授這件事,他說,這可能與代碼中的問題,但它很難爛攤子簡單代碼的幾行代碼。預先感謝您的考慮。
'sizeof(name);'不是字符串的長度! – BeyelerStudios
'sizeof()'返回一個變量的大小,以字節爲單位。 'name'是一個指針,就你而言,顯然你使用的是64位編譯器,所以'name'的長度是8個字節。如果你用32位編譯器重新編譯過,你會發現'sizeof(name)'的結果是4,因爲32位指針的長度是4個字節。 –