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

时间:2015-04-22 16:41:04

标签: c printf malloc

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

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

字符串是malloc&#39; d喜欢这个

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

以下是字符串的打印方式

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

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

1 个答案:

答案 0 :(得分:0)

字符串在C中以空值终止。当你malloc()内存时,它将被先前块中的任何内容填充。

一个解决方案是在使用\0之后通过memset()(在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

是一个更好的解决方案。