从函数返回数组
问题描述:
我在写一个函数,它接受整数值和指向字符的指针。 该函数将整数值转换为二进制值并将其存储在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.
我该如何解决这个问题?
感谢
答
它看起来像你打印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);
}
? – 2011-02-08 03:50:49
你用printf()打印吗? – 2011-02-08 03:53:11
几件事:1 /`main`第一行中的逗号是什么? 2 /为什么没有指定数组的长度? – Peyman 2011-02-08 03:58:40