gpt4 book ai didi

c - 字符串末尾打印奇怪的符号 - C

转载 作者:行者123 更新时间:2023-11-30 21:10:22 25 4
gpt4 key购买 nike

所以,我有一个程序可以解析一行文本中的表达式,例如

11110000 & 11001100 ;

并评估二进制结果。我的代码正确解析并正确评估,但对于我的两个测试输入(包括上面的一个),我的 printf 也在每次运行后打印这些奇怪的符号。

eos$ ./interpreter < program02.txt
11000000 +
eos$ ./interpreter < program02.txt
11000000 2ñ
eos$ ./interpreter < program02.txt
11000000 "]
eos$ ./interpreter < program02.txt
11000000 ÒØ
eos$ ./interpreter < program02.txt
11000000 Ê
eos$ ./interpreter < program02.txt
11000000 òJ

字符串是这样分配的

char *str = ( char * ) malloc ( ( getLength( src ) + 1 ) * sizeof( char ) );

这是字符串的打印方式

char *str = binaryToString( val );
printf( "%s\n", str );

任何帮助都会很棒!谢谢!

最佳答案

C 中的字符串以 null 结尾。当您 malloc() 内存时,它将被之前 block 中的内容填充。

一种解决方案是通过 memset() 用空字符 \0 填充缓冲区(可在 string.h 中找到) )在使用 malloc() 后,如下所示:

int strLen = getLength(src) + 1;
char *str = (char*)malloc(strLen * sizeof(char));
memset(str, '\0', strLen); // Fill with null chars

同样,您可以在最后一个字符后写入 \0

编辑:根据 iharob 的评论,这不是一个好的建议。考虑到这一点,并假设您知道字符串的长度:

int strLen = getLength(src) + 1;
char *str = calloc(strLen, sizeof(char)); // Allocate strLen * sizeof(char)
if (str == NULL) {
// Error allocating str - handle error
}
str[strLen - 1] = '\0'; // zero-based, so char is after final character

是一个更好的解决方案。

关于c - 字符串末尾打印奇怪的符号 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803880/

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