c - 从函数返回数组

标签 c pointers return

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

相关文章:

C:Turbo C 编译器中 for 循环的异常行为

c++ - 将 (size_t)-1 传递给 snprintf_s

c - 我如何在 GTK 中从 Glade 获取文本输入?

c++ - 如何为抽象类的未知子类分配内存

c - Sqlite3 和 C,用回调填充结构

java - return 语句后方法不退出

在 iSeries 上从 CL 调用 write() C API

c++ - 如何使 C++ 指针为空

javascript - 我应该在 ajax 调用中从服务器端代码返回什么

python - 为什么函数以 "return 0"而不是 python 中的 "return"结尾?