从函数返回数组

问题描述:

我在写一个函数,它接受整数值和指向字符的指针。 该函数将整数值转换为二进制值并将其存储在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

它看起来像你打印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 

虽然,也有可能被固定在执行一些其他的东西,我只是想专注于回答你原来的问题。

如果要打印的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); 
}