C 初始化包含字符串的结构

C 初始化包含字符串的结构,c,string,structure,C,String,Structure,在下面的程序中,第5行给出了一个错误,但第11行没有给出,因为两个程序都在执行相同的操作,即使用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

在下面的程序中,第5行给出了一个错误,但第11行没有给出,因为两个程序都在执行相同的操作,即使用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};
}
第5行应为:

char name[20] = {'\0'};

我想你忘了括号。尝试像char name[20]={0}那样编译
即使名称不是一个结构,它也是一个数组,这就是为什么必须添加这些括号来初始化的原因。行不同

第5行尝试用整数初始化字符数组


第11行使用初始化为0-'\0'

的字符串初始化结构如果要初始化复合对象数组、结构、联合,则需要将值放在大括号{}内。所以你需要写作

char name[20] = { 0 };  /* Or '\0' */
字符串是一种特殊情况,编译器会处理它,因此您可以编写

char name[20] = "";