我有一个结构
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>
答案 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);