gpt4 book ai didi

c - 开头带有奇怪字符的 Malloc printf

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:11 25 4
gpt4 key购买 nike

我目前正在学习 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: %s\n", 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 = '\0';

关于c - 开头带有奇怪字符的 Malloc printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com