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

虽然,在您的实现中还有其他一些问题可以解决,但我只想集中精力回答您最初的问题。

关于c - 从函数返回数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4929343/

10-13 06:59