在c中传递不同的结构类型用于函数

时间:2013-03-21 14:39:04

标签: 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 main()
{
   ArrayStruct my_data;
   my_data.len = 256;
   char data[] = "data is sent";
   my_data.data = &data;
   checkFunc((PointerStruct*)my_data);
   return 0;
 }

传递具有数组的结构是否有任何错误。其中所需的是指针。 请告诉我。

1 个答案:

答案 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;

}

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