2012-05-04 135 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);