2014-03-04 47 views
0

我想把我的端口號作爲const char *發送給一個函數。接收時的內存地址超出範圍。有人可以告訴我什麼是這樣做的正確方法?發送const char到一個函數並且超出範圍

這是我的代碼

在main()

 socket_open("host", 12345); // host and port number 

在功能方面

 socket_open(char * host,int port) { 
    int error; 
    struct addrinfo hints; 
    struct addrinfo *res; 
    ... 
    error = getaddrinfo(host,(char *)port,&hints,&res); 

我得到的getaddrinfo分割。看起來12345對char *來說太大了。我應該如何解決這個問題?

+0

1.看起來不像代碼中的任何問題。我建議包含更多的代碼。 2.當你從int類型轉換爲char *類型時,不會因爲兩者的尺寸相同而導致精度或數據丟失(由於它們都是內部的int)。所以'超出範圍'int可能不是問題。 –

+1

您不能將'int'強制轉換爲'char *'並將其傳遞給期望終止字符串的函數。並且加重傷害,你傳遞的「暗示」是完全不確定的(即你從未填滿過,並且被垃圾填滿)。 [getaddrinfo()']的文檔(http://linux.die.net/man/3/getaddrinfo)可能值得一讀。 – WhozCraig

回答

1

如果getaddrinfo期待一個字符串必須轉換port(一int)以一個第一。這裏有一種方法:

char portStr[MAX_PORT_STR_LEN]; 
snprintf(portStr, MAX_PORT_STR_LEN, "%d", port); 

現在,你可以把它送到getaddrinfo

error = getaddrinfo(host, portStr, &hints, &res); 
1

你必須在參數端口一個int。然後將它傳遞給一個將它解釋爲字符指針的函數,並開始從int中的地址讀取字符,直到找到零。但地址指出你的可讀內存段。或者如果沒有找到零,它會繼續閱讀,直到出現分段錯誤。

將您的號碼正確轉換爲字符串。

查看@Raz Wilson的回答。