字符串终止符问题

时间:2018-07-20 15:44:56

标签: c

如果我输入此代码,它将编译并运行(我使用GCC)

#include<stdio.h>
int main()
{

char sentence[8]="September";

printf("The size of the array is %d \n",sizeof(sentence));

printf("The array is %s \n",sentence);
}

并给出输出

  

数组的大小为8

     
    

数组是Septembe

  

这是如何工作的? C需要一个字符串终止符来知道字符串已经结束。数组如何占用8个字节的空间并知道在哪里停止?

1 个答案:

答案 0 :(得分:4)

通过将非NUL终止的字符串传递给printf("%s"),您正在调用未定义的行为

就其本质而言,结果是不确定的。似乎是“工作”(就像您看到的那样)。


正如其他人所解释的那样,可能发生的情况是,字符串后面恰好有一个零字节,这阻止了printf继续前进。但是,如果要在该变量周围添加更多的 stuff ,则可能会看到不同的行为:

#include<stdio.h>

int main(void)
{
    char sentence[8] = "September";        // NOT NUL TERMINATED!
    char stuff[] = "This way is better";

    printf("%s\n", sentence);              // Will overrun sentence
    return 0;
}