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;
}


通过这些更改,您的代码应该可以正常工作。

A
char[]
是一种
char*
类型。在一种情况下,大小在编译时已知,而在另一种情况下则不知道。从技术上讲,您可以只使用
PointerStruct
,因为
len
是为两者提供的。