我正在编写一个函数,它接受整数值和指向字符的指针。 该函数将整数值转换为二进制并将其存储在 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
打印为字符串,并且由于它不是以 null 结尾的,因此打印例程继续打印相邻缓冲区 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
尽管在您的实现中还有一些其他问题可以解决,但我只想专注于回答您最初的问题。
关于c - 从函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929343/