我一定错过了一些明显的东西......
我想在我的struct中有一个指向字符串数组的空指针:
typedef struct SCR_SETTEXT_DESC_S
{
uint_8 Value; //Current value - copy made prior function call
char *Strings; // Pointer to array of strings
} SCR_SETTXT_DESC;
然后我想使用这个结构并分配真正的字符串数组:
SCR_SETTXT_DESC ScrSetTxtDesc;
char ScreenSetTxt_strings[4][20];
strcpy(ScreenSetTxt_strings[0], "choice1");
strcpy(ScreenSetTxt_strings[1], "choice2");
strcpy(ScreenSetTxt_strings[2], "choice3");
ScrSetTxtDesc.Strings = ScreenSetTxt_strings;
我收到错误:
错误[Pe513]:无法将类型为“char(*)[20]”的值分配给 “char *”类型的实体
我做错了什么?
我想像这样使用它:
printf("%s",ScrSetTxtDesc.Strings[0]);
提前致谢,
BUL。
答案 0 :(得分:1)
您不是创建字符串数组,而是创建单个字符串(char *)。
如果您想拥有一个字符串数组,请使用
char **Strings;
然后,您需要使用malloc
初始化数组。
发生错误是因为您将单个字符串限制为20个字符(char[20]
),这与char*
不兼容。
答案 1 :(得分:1)
SCR_SETTEXT_DESC.Strings
是一个指向char的指针(char *
),而ScreenSetTxt_strings
数组衰减成一个指向20的数组指针 - char
s 。那些是不兼容的类型。
根据您的实际要求,您可以将结构成员声明为char (*Strings)[20]
,也可以获取指向数组第一个数组中第一个字符的指针:
ScrSetTxtDesc.Strings = &ScreenSetTxt_strings[0][0];
请注意,如果要围绕函数传递此结构,则不应指定指向函数范围自动变量的指针,因为该函数返回时该指针无效。