2012-05-06 43 views
2

您好我真的不能讓我解決這個頭。我基本上試圖通過傳遞輸出數組作爲參數來從函數返回一個char數組。以下是我迄今爲止:通過引用傳遞一個字符數組用C

功能:

int GetComputerName(char *name, char *ip_address){ 
    *name = "testing"; 
    return 0; 
} 

,把它:

char comp_name[50]; 
GetComputerName(&comp_name, serverIP); 
printf("\n\n name: %s\n\n", comp_name); 

我曾嘗試切換和交換*和&,看看會有什麼工作,有在指針和閱讀的東西還沒我覺得應該發生什麼了什麼是真正確實發生是兩個非常不同的東西,現在我想我已經糊塗比當我開始自己更多!笑

可有人請幫助我,並解釋這樣做是正確的做法?

在此先感謝=)

回答

11

這條線:

*name = "testing"; 

是無效的,因爲分配指針 「測試」 爲焦炭按名稱指出。您需要將數據複製到緩衝區中。它應該是:

int GetComputerName(char *name, char *ip_address){ 
    strcpy(name,"testing"); 
    return 0; 
} 

甚至更​​好(以避免溢出):

int GetComputerName(char *name, size_t buff_len, char *ip_address){ 
    strncpy(name,"testing", buff_len); 
    name[buff_len - 1] = '\0'; 
    return 0; 
} 

,並稱之爲:

GetComputerName(comp_name, sizeof(comp_name), serverIP); 
+0

是奏效謝謝! :) 那麼strcpy是做什麼的=不? 我想我還是有1/2我的頭左右浮動Java和C#因爲這是我在過去所做的那樣!笑 – geekman92

+1

'strcpy'副本交流從一個緩衝到另一個,但一個更安全的功能的字符串是'strncpy',到這裏看看:HTTP://www.cplusplus.com/reference/clibrary/cstring/strncpy/ – MByD

+0

謝謝你幫助我理解! :)非常好,完整的答案! – geekman92