C语言 Malloc打印与奇怪的字符在开始



我正在学习C语言,被这个奇怪的错误卡住了。奇怪的是,这个错误没有发生在一个编译器上,但却发生在另外两个编译器上。考虑到我对malloc相当陌生,我想也许我做了一些我不应该做的事情。

下面是我遇到麻烦的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char* int_to_binary(unsigned int x)
{
    char *str = (char *) malloc(sizeof(char)*9);
    int z;
    for (z = 128; z > 0; z >>= 1)
    {
        strcat(str, ((x & z) == z) ? "1" : "0");
    }
    return str;
}
int main()
{
    printf("Testing: %sn", int_to_binary(1));
    return 0;
}

我在linux平台上编译这个文件,得到以下输出:

测试:00000001

但是在Windows和codepad.org上的C编译器上,我得到以下输出:

测试:����������00000001

我不明白是什么原因导致cstring前面的额外字符

你不能把strcat()放到一个未初始化的缓冲区,它期望它的第一个参数是终止的nul。同样使用strcat()是一个坏主意,你应该使用指针算法来附加字符和nul终止str,以便将其传递给printf()

char *ptr;
ptr = str;
for (z = 128 ; z > 0 ; z >>= 1, ptr++)
    *ptr = ((x & z) == z) ? '1' : '0';
*ptr = '';

相关内容

  • 没有找到相关文章

最新更新