C語言中字符串結束符探究
#include <stdio.h>
#include <string.h>
int main()
{
char *a = "hello world";
int i = 0;
for(i = 0; i < 12; i++)
if(a[i] == '\0')
printf("\\0\n");
else
putchar(a[i]);
//輸出結果為:hello world\0 表明字符串常量最後默認會添加一個'\0'這個字符串結束符。
printf("\n");
printf("The length of \"hello world\" = %d\n",strlen(a));
//輸出結果為: 11 。表明strlen不包括'\0’這個字符串結束符。
printf("\n");
char buf[10] = "helle world";
for(i = 0; i < 11; i++)
if(buf[i] == '\0')
printf("\\0\n");
else
putchar(buf[i]);
/**輸出為 hello worl@ 。輸出了11個字節。最後一個字節不是'\0',而是@(這個字節是隨機的)。
從上面情況可以看出,將數組中賦值字符串常量時,如果字符串常量長度大於數組長度,數組最後一位並不是'\0',如果字符串常量長度小於數據長度,那麼數據中剩余部分將會用'\0'補全。如buf[10] = "hello",那麼buf的buf[5] ---buf[9]都將會被填充為'\0'
**/
printf("\n");
char *b = "hello world";
char ba[10] = "hello world";
printf("&a = %p,&b = %p,&buf = %p,&ba = %p \n",a,b,buf,ba);
if(*(a+11) == '\0')
printf("\\0\n");
return 0;
}