正如标题所说。我已经看了一些相关的问题,但他们并没有像我一样。以下是代码段:
int convert(int in, unsigned int newBase, char result[]){
int i = 0;
for (i; i < 32; ++i){
if (in % newBase == 0)
result[i] = '0';
else
result[i] = '1';
in = in / newBase;
++i;
}
result[31] = "\0";
return 1;
}
result[]
由驱动程序文件保证大小为32.例如,如果我调用convert(1275, 2, result[0]);
,它应该构建二进制表示(向后,但这不是现在的问题)11011111001。它这样做,但穿插所有的二进制数字是一个重点在它上面的大写字母。为什么会这样?
答案 0 :(得分:1)
要将32个二进制数字作为字符串保存,result
需要为33个字节,空值为result[32]
(第33个字符),而不是result[31]
。
此外,作为char常量的null应该使用单引号,而不是双引号...所以更改:
result[31] = "\0";
为:
result[32] = '\0';
...并确保result
有至少33个字符的空间。您看到的奇怪字符可能是尝试编写字符串文字地址的结果
“\ 0”进入result
。