ANSI C:结构中的字符串数组中的匿名指针 - 问题?

时间:2013-05-21 17:12:35

标签: arrays string pointers

我一定错过了一些明显的东西......

我想在我的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。

2 个答案:

答案 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];

请注意,如果要围绕函数传递此结构,则不应指定指向函数范围自动变量的指针,因为该函数返回时该指针无效。