如何定义和初始化结构中的字符串数组?

typedef struct mobiltelefon { char herstellername[HLEN]; double displaydiagonale; aufloesung_t aufloesung; char standards[NUMBER_OF_STRINGS][STRINGLENGTH+1] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}; } telefon_t; 

我不断收到错误expected ; at the end of declaration list expected ; at the end of declaration list

更改

 char (*standards[6])[5] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

 char standards[6][6] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

一个简单的例子:

 #include  int main(int argc, char *argv[]) { int i; char standards[6][6] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; for(i=0;i<6;i++) printf("%s\n",standards[i]); return 0; } 

请注意char standards[6][5]在你的情况下是错误的,因为你的2D数组中最长的字符串是HSDPA和长度为5的HSUPA ,你需要多一个字节来终止'\0' 0'char。

你可以使用2D数组,如果你知道你将放入的字符串的最大长度,例如,如果我们知道没有字符串将超过4个字符然后只是做

 char arr[6][5] = {"GPRS" , "EDGE" , "HSDPA" , ...}; 

更好的方法是这样做

 char *arr[] = { "GPRS" , "EDGE" , "HSPDA"} 

这样您就不必担心字符串的长度或可以添加多少字符串

初始化字符串数组的一种方法是:

 char *standards[] = {"GPRS", ...}; 

你不必传递字符串的数量,编译器会想出来的。

结构中的变量无法初始化。显然,标准无法在结构内初始化。

删除*和{}。 改变这个:

 char (*standards[6])[5] = {{"GPRS"}, {"EDGE"}, {"HSDPA"}, {"HSUPA"}, {"HSPA"}, {"LTE"}}; 

对此:

 char standards[6][6] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}; 

到结构:

您无法在其声明中初始化结构成员。 你需要做这样的事情:

 typedef struct mobiltelefon { char herstellername[HLEN]; double displaydiagonale; aufloesung_t aufloesung; char standards[NUMBER_OF_STRINGS][STRINGLENGTH+1]; } telefon_t; 

并像这样初始化变量(仅限C99 / C11):

 telefon_t iphone = {.standards = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"}}; 

或者使用memcpy:

 memcpy(iphone.standards[0], "GPRS", 5); memcpy(iphone.standards[1], "EDGE", 5); memcpy(iphone.standards[2], "HSDPA", 6); memcpy(iphone.standards[3], "HSUPA", 6); memcpy(iphone.standards[4], "HSPA", 5); memcpy(iphone.standards[5], "LTE", 4); 

但这是浪费空间,如果每部手机都有相同的标准,我宁愿选择全局变量:

 char teleon_standards[6][6] = {"GPRS", "EDGE", "HSDPA", "HSUPA", "HSPA", "LTE"};