2013-08-29 80 views
0

在下面的程序中,第5行給出了一個錯誤,但是當這兩個操作完成相同的操作時,如果初始化字符串爲0,那麼第11行不會生成錯誤。 我非常清楚,它給編譯器error.My懷疑確切的是,如果第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}; 
} 

回答

2

如果你想初始化一個複合對象(數組,結構,工會),那麼你需要把花括號{}裏面的值。所以你需要寫

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

字符串是一種特殊情況,編譯器處理它,所以你可以編寫例如

char name[20] = ""; 
1

5號線應該是:

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

我想,你就忘了支架。嘗試編譯像char name[20]={0} 即使name不是一個結構,它是一個數組,這就是爲什麼你必須添加這些括號來初始化

1

線是不一樣的原因。

第5行試圖用整數初始化char數組。

線11初始化結構與0初始化字符串 - 「\ 0」