所以,我有一个程序可以在一行文本中解析表达式,例如
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 );
任何帮助都会很棒!谢谢!
答案 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
是一个更好的解决方案。