在下面的程序第5行中给出了一个错误,但是当两者都做同样的事情时,它们没有给出错误,即用0初始化字符串? 我非常清楚它会给编译器错误。我怀疑的是,如果第5行给出错误,那么为什么第11行不会?
#include<stdio.h>
int main()
{
char name[20]=0; //This should also run if line 11 runs without an error where string is being initialized by zero.
struct node
{
char name[20];
int no;
};
struct node a={0};
}
答案 0 :(得分:2)
如果要初始化复合对象(数组,结构,联合),则需要将值放在花括号{}
中。所以你需要写
char name[20] = { 0 }; /* Or '\0' */
字符串是一种特殊情况,编译器会处理它,因此您可以编写例如。
char name[20] = "";
答案 1 :(得分:1)
第5行应该是:
char name[20] = {'\0'};
答案 2 :(得分:0)
我想你只是忘了支架。尝试编译char name[20]={0}
即使name
不是结构,它也是一个数组,这就是你必须添加这些括号来初始化的原因
答案 3 :(得分:0)
线条不一样。
第5行试图用整数初始化一个char数组。
第11行初始化一个结构,其字符串初始化为0 - '\ 0'