2011-02-08 222 views
1

我在寫一個函數,它接受整數值和指向字符的指針。 該函數將整數值轉換爲二進制值並將其存儲在char指針中。 char指針長16字節。從函數返回數組

代碼片段:

void int2bin(u_int16_t addr_IP, char *Binary) 
{ 
    int count; 
    printf("IP1add = %d \n", Binary); 
    for (count = 0; count < 16; count++) { 
     if(addr_IP>0) 
      *(Binary + 15-count) = addr_IP & 0x1 ? '1':'0'; 
     else 
      *(Binary + 15-count) = '0'; 

      addr_IP>>=1; 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    u_int16_t senderIP_16[], u_int16_t receiverIP_16[]; 
    char sender_IP_hi[16], sender_IP_low[16]; 
    int2bin(senderIP_16[0], &sender_IP_hi); 
    int2bin(senderIP_16[1], &sender_IP_low); 
} 

在第一次調用函數,它返回正確的值。但是在第二遍中,第一遍的值被附加到第二遍,即sender_IP_low的長度變爲32.

我該如何解決這個問題?

感謝

+0

? – 2011-02-08 03:50:49

+1

你用printf()打印嗎? – 2011-02-08 03:53:11

+0

幾件事:1 /`main`第一行中的逗號是什麼? 2 /爲什麼沒有指定數組的長度? – Peyman 2011-02-08 03:58:40

回答

3

它看起來像你打印sender_IP_low作爲一個字符串,因爲它是不是空終止,打印程序繼續打印相鄰的緩衝,sender_IP_hi。你可能只是幸運的是打印程序發現一個零點並在分段錯誤之前停止。

一個快速的解決方法是:

void int2bin(u_int16_t addr_IP, char *Binary) { 
    ... 

    Binary[16] = 0; // terminate the string before returning 
} 

... 

char sender_IP_hi[17], sender_IP_low[17]; // +1 for null terminator 

雖然,也有可能被固定在執行一些其他的東西,我只是想專注於回答你原來的問題。

1

如果要打印的printf()的數組:什麼是你想要做

void int2bin(u_int16_t addr_IP, char *Binary) 
{ 
    int count; 
    printf("IP1add = %d \n", Binary); 
    for (count = 0; count < 16; count++) { 
     if(addr_IP>0) 
      *(Binary + 15-count) = addr_IP & 0x1 ? '1':'0'; 
     else 
      *(Binary + 15-count) = '0'; 

      addr_IP>>=1; 
    } 
    // Put the NULL char in the last position 
    Binary[16] = '\0'; 
} 

int main(int argc, char *argv[]) 
{ 
    u_int16_t senderIP_16[], u_int16_t receiverIP_16[]; 
    // One more char for storing the terminator character 
    char sender_IP_hi[17], sender_IP_low[17]; 
    int2bin(senderIP_16[0], &sender_IP_hi); 
    int2bin(senderIP_16[1], &sender_IP_low); 
}