在函数之间传递结构

时间:2015-06-28 18:32:40

标签: c structure

我刚刚写了一个小程序来玩结构。这个程序工作正常,但我只是在一个声明中有一点疑问。谁能澄清我了?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct mystr
{
    int a;
    float b;
    char a1[10];
};
void fun(struct mystr *ptr1)
{
    struct mystr *ptr;
    ptr=malloc(sizeof(struct mystr));
    ptr->a=10;
    ptr->b=1662.3456;
    strcpy(ptr->a1,"xxxxxx");
    *ptr1=*ptr;  /* <<<<<<<<<<<- This assignment is fine? */
    free(ptr);
}
void main()
{
    struct mystr var1;
    memset(&var1,0,sizeof(struct mystr));
    fun(&var1);
    printf("my data is %4d,%10.3f,%5s\n",var1.a,var1.b,var1.a1);
}

我知道我可以通过一个指向乐趣的指针并将其打印出来。但我只是希望这个程序是这样的(传递结构变量地址并填充它)。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

此作业

*ptr1=*ptr;  /* <<<<<<<<<<<- This assignment is fine? */

很好。只有动态分配一个初始化原始结构的结构是没有意义的。你可以编写更简单的函数

void fun(struct mystr *ptr1)
{
    ptr1->a = 1 0;
    ptr1->b = 1 662.3456;
    strcpy( ptr1->a1, "xxxxxx" );
}

而不是在结构对象定义之后使用memset

struct mystr var1;
memset(&var1,0,sizeof(struct mystr));

你可以写简单

struct mystr var1 = { 0 };

考虑到C中的函数main应声明为

int main( void )

至少它应该有返回类型int。

答案 1 :(得分:0)

在发布的代码中,这一行:

*ptr1=*ptr;

是胡说八道。

它不会复制两个结构的内容。

复制内容,使用memcpy(pDestination,pSource,numBytesToCopy);

memcpy( ptr1, ptr, sizeof( struct mystr ) );