正如标题所说。我已经查看了一些相关问题,但他们的做法与我不同。这是代码片段:
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。它这样做了,但散布在所有二进制数字中的是一个带有重音符号的大写字母 I。为什么会发生这种情况?
最佳答案
要将 32 个二进制数字作为字符串保存,result
需要为 33 个字节,并且 null 位于 result[32]
(第 33 个字符),而不是 结果[31]
。
此外,作为 char 常量的 null 应该使用单引号,而不是双引号...所以更改:
result[31] = "\0";
至:
result[32] = '\0';
...并确保 result
有至少 33 个字符的空间。您看到的奇怪字符可能是尝试写入字符串文字的地址的结果
“\0”进入结果
。
关于c - 用 C 语言构建二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686795/