2013-05-21 24 views
1

我必须失去了一些东西明显...ANSI C:结构中字符串数组的匿名指针 - 问题?

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

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。

回答

1

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

如果你想有一个字符串数组,使用

char **Strings; 

你会那么需要使用malloc来初始化数组。

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

1

SCR_SETTEXT_DESC.Strings是一个指针到炭(char *),而ScreenSetTxt_strings阵列衰变成指针到阵列的-20- char秒。这些是不兼容的类型。

根据您的实际需求是什么,你可以声明结构成员为char (*Strings)[20],或者你可以在阵列的第一阵列中获得一个指向第一个字符:

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

注意,如果你想要在函数周围传递这个结构,你不应该为函数范围自动变量指定一个指针,因为当函数返回时该指针是无效的。

+0

嗨,谢谢你的回复。现在编译,但字符串扁平化为单个索引(所以我必须访问字符串与索引* 20 ...我可以做得更好 - 所以我可以保留原始字符串数组? – user2152780

+0

@ user2152780使用方法#1,一个指针阵列。 – 2013-05-21 20:29:35