0

我有以下代码:

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

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

4

1 回答 1

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;

}

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

于 2013-03-22T01:41:36.753 回答