2012-05-04 101 views
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我得到一个空白标题可能是什么原因。

回答

6

C中的函数参数是按值传递的。所以,如果你的函数的签名是这样的:

foo function(structname Header); 

这意味着该参数是复制当函数被调用。然后在函数内修改该临时副本,但不会更改原始对象。您可能需要一个指针传递给你的结构的函数:

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

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

感谢我给它一个去,现在 – ahmet

+0

'(GDB)p报头 - >名1 在地址无法访问内存0x6b6c69420000303d' 获得t他现在的功能,当我尝试打印它 – ahmet

+0

@greenarrow:这个问题不在我身边。如果你像这样声明结构体并且立即传递一个指向它的指针,它应该是可用的。 –

1

C函数是通过按值,所以当你打电话function(Header);,要传递该结构的副本并对其进行修改,你应该通过一个指针结构的其他功能:

function(&Header);