-1

在下面的程序中,第 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};
}
4

4 回答 4

2

如果要初始化复合对象(数组、结构、联合),则需要将值放在花括号内{}。所以你需要写

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

字符串是一种特殊情况,编译器会处理它,因此您可以编写例如

char name[20] = "";
于 2013-08-29T09:02:04.493 回答
1

第 5 行应该是:

char name[20] = {'\0'};
于 2013-08-29T08:53:23.917 回答
0

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

于 2013-08-29T08:54:26.307 回答
0

线条不一样。

第 5 行试图用一个整数初始化一个 char 数组。

第 11 行使用初始化为 0 - '\0' 的字符串初始化结构

于 2013-08-29T08:58:05.287 回答