调用函数填充后的空结构

时间:2012-05-04 10:41:49

标签: c

我有一个结构

typedef struct
{
  my ints
  and char's
} structname;

.c

内的我的服务器main()文件中
structname Header;

我正在呼叫function(Header);

查看另一个.c文件

并用例如填充标题strcpy(Header.Name1,pch);

由于我使用gdb进行调试,因此会正确填充

(gdb) p Header.Name1
$5 = "Bilka\000\332\326\377\177\000\000\001\000\000\000\000\000\000\000\b]\022\"E\177\000\000p\356\332\326\377\177\000\000\034\000\000\000\000\000\000\000\t\000\000\000\000"

在此函数结束并返回TRUE之后,它将返回到server.c上的下一行。但是如果我在Header.Name1上打印,我会得到一个空白标题,这可能是原因。< / p>

2 个答案:

答案 0 :(得分:6)

C中的函数参数按值传递。因此,如果您的函数的签名如下所示:

foo function(structname Header);

这意味着在调用函数时,参数是复制。然后,您可以在函数内修改该临时副本,但这不会更改原始对象。您可能希望将指向结构的指针传递给函数:

foo function(structname * Header)
{
  //...
  strcpy(Header->Name1, pch);
}

// ...
structname Header;
function(&Header);
printf("%s\n", Header.Name1);

答案 1 :(得分:1)

C函数是按值传递的,所以当你调用function(Header);时,你正在传递结构的副本并修改它,你应该将结构的指针传递给另一个功能:

function(&Header);