如何定义和初始化结构中的字符串数组?
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"};