我有以下代码:
typedef struct PStruct{
int len;
char* data;
}PointerStruct;
typedef struct AStruct{
int len;
char data[256];
}ArrayStruct;
void checkFunc(PointerStruct* myData)
{
if (0 == myData || 0 == myData->data){
printf("error\n");
}
}
int main()
{
ArrayStruct my_data;
my_data.len = 256;
char data[] = "data is sent";
my_data.data = &data;
checkFunc((PointerStruct*)my_data);
return 0;
}
传递具有数组的结构是否有任何错误。其中所需的是指针。 请告诉我。
答案 0 :(得分:0)
您的计划需要考虑几点。
char data[] = "data is sent";
这是一个包含13个字符的字符数组。因此,my_data.data = &data;
将产生编译错误,如下所示
error: incompatible types when assigning to type 'char[256]' from type 'char (*)[13]'
要复制字符串,您可以使用strcpy,如下所示
strcpy(my_data.data, data);
下一步是将指针传递给对象。在此调用checkFunc((PointerStruct*)my_data);
中,您将对象的实例传递给函数调用,但是将类型转换为指针。由于数据类型不匹配为error: cannot convert to a pointer type
要克服此错误,您应该将my_data
对象的引用传递为checkFunc((PointerStruct*) &my_data);
。因此,您的新main
函数看起来像
int main()
{
ArrayStruct my_data;
my_data.len = 256;
char data[] = "data is sent";
//my_data.data = &data;
strcpy(my_data.data, data); // Use of strcpy. You would require to include <string.h>
checkFunc((PointerStruct*)(&my_data)); // Pass a reference and not by value
return 0;
}
通过这些更改,您的代码应该可以正常工作。