如何将struct作为参数传递

时间:2016-03-29 08:14:06

标签: c struct

我正在编写一段C代码,我应该使用包含一个函数的静态库。我有一个头文件,包含一个typedef结构,我应该将其用作输入参数。

我对函数的理解是,我创建了一个在头文件中定义的数据类型的结构,并将其作为指向函数的指针,函数将填充结构。另外两个参数是datastrlen(data)

我的问题是。如何在.c文件中创建结构,如何从中获取数据?

这是我的.h文件

#include <stdint.h>
#include <stddef.h>
typedef struct
{
  uint8_t arrayA[2];
  uint8_t arrayB[16];
} structDefinition;

void getData(structDefinition* myStructure, void const* data, size_t dataSize);

这是我的.c文件

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "myHeader.h"

structDefinition myStructure;

int main()
{
    char data[5] = {'123AF'};
    size_t dataSize = 5;

    getData(*myStructure, *data, dataSize);
    printf(mySignature.arrayA);
    printf(mySignature.arrayB);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您需要传递函数结构的地址。

myStructurestruct Definition

类型的对象

现在通过

getData(&myStructure,data,dataSize);

datachar类型的数组,可以传递给char *

请检查字符数组初始化

char data[6] = "123AF";/* char array comes with a nul terminator */

和char数组的长度可以从

获得
size_t dataSize = strlen(data);

如果您想知道strlen(),则不需要第3个参数。 因为你可以从传递的字符串中获取它。

答案 1 :(得分:2)

这个定义

char data[5] = {'123AF'};

错了。 '123AF'是一个字符文字。它的值是实现定义的。看来你的意思是

char data[5] = { "123AF" };

其中"123AF"是字符串文字。

函数调用

getData(*myStructure, *data, dataSize);

也错了。它必须看起来像

getData( &myStructure, data, dataSize );

这些输出语句也可能是错误的,因为数组似乎可以包含不终止零的字符

printf(mySignature.arrayA);
printf(mySignature.arrayB);

要正确输出这些数组,您需要查看函数getData的定义,以确定如何分配数组。