Pointers 在c中为函数传递不同的结构类型
我有以下代码:Pointers 在c中为函数传递不同的结构类型,pointers,structure,Pointers,Structure,我有以下代码: 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
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;
}
传递具有数组的结构是否有错误。其中所需的是指针。
请让我知道。在您的计划中有几点需要考虑
char data[] = "data is sent";
这是一个包含13个字符的字符数组。因此,my_data.data=&data代码>将给出一个编译错误,如下所示
error: incompatible types when assigning to type 'char[256]' from type 'char (*)[13]'
strcpy(my_data.data, data);
要复制字符串,可以使用strcpy,如下所示
error: incompatible types when assigning to type 'char[256]' from type 'char (*)[13]'
strcpy(my_data.data, data);
下一点是将指针传递到对象。在这个调用中,checkFunc((PointerStruct*)my_data)代码>,将对象的实例传递给函数调用,但将类型转换为指针。由于数据类型不匹配,您将面临编译问题,如错误:无法转换为指针类型
要克服此错误,应将对my_数据的引用传递为checkFunc((PointerStruct*)&my_数据)代码>。因此,新的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;
intmain()
{
阵列构造我的_数据;
my_data.len=256;
char data[]=“数据已发送”;
//my_data.data=&data;
strcpy(my_data.data,data);//strcpy的使用。您需要包括
checkFunc((PointerStruct*)(&my_data));//传递引用而不是值
返回0;
}
通过这些更改,您的代码应该可以正常工作。Achar[]
是一种char*
类型。在一种情况下,大小在编译时已知,而在另一种情况下则不知道。从技术上讲,您可以只使用PointerStruct
,因为len
是为两者提供的。