1

我有一个结构

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 上进行打印,我会得到一个空白标题,这可能是什么原因。

4

2 回答 2

7

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

foo function(structname Header);

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

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

// ...
structname Header;
function(&Header);
printf("%s\n", Header.Name1);
于 2012-05-04T10:45:07.557 回答
1

C 函数是按值传递的,因此当您调用 时function(Header);,您传递的是结构的副本并对其进行修改,您应该将指向该结构的指针传递给另一个函数:

function(&Header);
于 2012-05-04T10:45:53.117 回答