1

我一定遗漏了一些明显的东西......

我想在我的结构中有一个指向字符串数组的空指针:

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;

在这里我得到错误:

错误[P​​e513]:“char (*)[20]”类型的值不能分配给“char *”类型的实体

我究竟做错了什么 ?

我想这样使用它:

printf("%s",ScrSetTxtDesc.Strings[0]);

提前致谢,

布尔。

4

2 回答 2

1

SCR_SETTEXT_DESC.Strings是一个指向字符的指针 ( char *),而ScreenSetTxt_strings数组衰减为一个指向 20char秒数组的指针。这些是不兼容的类型。

根据您的实际要求,您可以将 struct 成员声明为char (*Strings)[20],也可以获取指向数组第一个数组中第一个字符的指针:

ScrSetTxtDesc.Strings = &ScreenSetTxt_strings[0][0];

请注意,如果要在函数周围传递此结构,则不应将指针分配给函数范围的自动变量,因为该指针在函数返回时无效。

于 2013-05-21T17:17:12.907 回答
1

您不是在创建一个字符串数组,而是一个字符串 (char*)。

如果您想要一个字符串数组,请使用

char **Strings; 

然后,您需要使用malloc.

发生错误是因为您将单个字符串限制为 20 个字符 ( char[20]),这与char*.

于 2013-05-21T17:16:36.543 回答