2017-07-03 54 views
0

我在傳遞一個char *到功能中C.Ç通過串起作用問題

一個問題我有一個方法dns_magic,其中所述參數中的一個是char *addr。另外,我有一個char temp[20],它包含一個字符串(通常類似於irc.rizon.net)。在我致電dns_magic(temp)之前,我做了一個printf("Temp: %s", temp)並按預期打印。在dns_magic的第一行中,我呼叫printf("Addr: %s", addr),它不打印任何內容(就好像字符串爲空)。

下面的代碼的相關部分:

printf("Temp: %s", temp); 
res = dns_magic(temp, conf->port, &hints); 

struct addrinfo *dns_magic(char *addr, int port_i, struct addrinfo hints) 
{ 
    printf("Addr: %s", addr); 

有人能幫忙告訴我什麼,我做錯了什麼?我試着改變dns_magic以取得char [20]並禁用編譯器優化,但似乎都沒有解決這個問題。

任何幫助表示讚賞。

+0

C不支持_methods_。我們需要一個[mcve]。 – Olaf

回答

1

打開編譯器警告並擺脫它們。

我建議你的第三個參數搞砸了。你聲明瞭一個完整的結構,但是傳入了一個指針。堆棧被搞砸了,函數無法正確找到傳遞的參數。

您應該將最後一個參數struct addrinfo *hints加上適當的const修飾符。

+0

我已經有了所有的編譯器警告(-Wall -Wextra和-pedantic),但事實證明我忘記了將頭文件包含在相應的源文件中 - 這導致我不會注意到我的頭文件有不同的聲明,這摧毀了我的籌碼並造成了這個問題。雖然這個評論不是100%準確的(原來很難與給定的信息),但它非常接近,所以我會將它標記爲無論如何。 – astronautlevel