Ump*_*Gee 5 c arrays struct function-pointers
我正在尝试初始化一组结构.结构中包含函数指针,并定义如下:
typedef struct{
char str[512];
char *fptr;
} infosection;
Run Code Online (Sandbox Code Playgroud)
然后我尝试制作一个数组:
infosection section[] = {
("Software", *SoftwarePtr),
("Hardware", *HardwarePtr),
}
Run Code Online (Sandbox Code Playgroud)
我使用一个简单的教程定义了函数指针.Function Software返回一个int
int (*SoftwarePtr)()=NULL;
SoftwarePtr = &Software;
Run Code Online (Sandbox Code Playgroud)
我的问题是我在编译时遇到的警告.
初始化从指针生成整数而不进行强制转换
警告引用section数组中的行.
所以我有两个疑问:
我可以infosection struct像在这里一样声明数组中的实例吗?我已经看到很多例子,人们array of struct在a中声明它们for loop,但是我的最终产品需要在该数组中包含一长串结构.我想让我的代码portable使得人们可以add structs(以与要指向的功能相对应的字符串)以易于列表的方式看待.这是声明数组实例的唯一方法
infosection section[];
section[0].str="software";
section[0].fptr=SoftwarePtr;
Run Code Online (Sandbox Code Playgroud)只是为了澄清,我已经做了相当多的研究structs,array of structs和function pointers.看起来3的组合似乎造成了麻烦.
一
我发现的一个错误,在函数指针的结构声明中是不正确的:
typedef struct{
char str[512];
int (*fptr)(); // not char* fptr
} infosection;
Run Code Online (Sandbox Code Playgroud)
二
宣言:
infosection section[] = {
("Software", *SoftwarePtr),
("Hardware", *HardwarePtr),
}
Run Code Online (Sandbox Code Playgroud)
应该:
infosection section[] = {
{"Software", SoftwarePtr},
{"Hardware", HardwarePtr}
}
Run Code Online (Sandbox Code Playgroud)
删除*.和替换内( )用 { }.
三:
infosection section[];
section[0].str="software"; // compiler error
section[0].fptr=SoftwarePtr;
Run Code Online (Sandbox Code Playgroud)
是不是你不能以这种方式分配字符串.你需要使用strcpy()如下;
strcpy(section[0].str, "software");
Run Code Online (Sandbox Code Playgroud)