字符串大小等于字符数

时间:2013-10-03 09:00:58

标签: c arrays string printf

我正在制作一个基本的字符串程序并做到了这一点。这样就有一个字符串:

#include<stdio.h>
int main()
{
    char str[7]="network";
    printf("%s",str);
    return 0;
}

它打印network。在我看来,它不应该打印网络。应打印一些垃圾值,因为'\0'不会结束此字符数组。那怎么打印?没有任何警告或错误。

4 个答案:

答案 0 :(得分:3)

那是因为

char str[7]="network";

相同
char str[7]={'n','e','t','w','o','r','k'};

str是一个有效的char数组,但不是字符串,因为它没有以空值终止。因此,使用%s打印它是未定义的行为。

参考:C FAQ: Is char a[3] = "abc"; legal? What does it mean?

答案 1 :(得分:3)

char str[7]="network"; 

此调用Undefined behavior

您没有声明具有足够空间的数组

这应该是

char str[8]="network";  

答案 2 :(得分:0)

char str[7]="network";

你没有为字符串提供足够的空间

char str[8]="network";

答案 3 :(得分:0)

堆栈页面可能在系统中完全归零,因此字符串实际上在内存中以空值终止,但不是由于您的代码。

尝试使用调试器查看内存中的程序,阅读平台文档或打印出str[7]的内容以获取一些线索。这样做会调用未定义的行为,但是当你试图弄清楚你的特定编译器和操作系统在一个给定的时间点正在做什么时,它就无关紧要了。