【发布时间】:2019-02-12 06:12:48
【问题描述】:
我似乎不明白printf() 如何在 C 中格式化 char 数组的输出。我有一段代码,其目的是将整数转换为二进制字符串,然后打印出来。代码一直有效,直到我打印从integerToString() 返回的字符串,因为它不打印字符串的内容。
我检查了 gdb 以确保 res 和 str 在 printf() 调用之前包含正确值的数组。我也尝试过打印*res 而不仅仅是res,但这会返回(null)。我错过了什么?指针有什么我没有掌握的吗?
非常感谢。
#include<stdio.h>
#include<stdlib.h>
int main () {
printf("Please enter a positive integer: ");
unsigned int input;
scanf("%d", &input);
char* res = integerToString(input);
printf("Represented in binary that integer is: %s\n", res);
}
char* integerToString(unsigned int number){
unsigned int value = number;
char* str;
str = malloc(33); //32 bits for the string, +1 null value on the end
unsigned int i = 31;
while (i > 0){
str[i] = value % 2;
value /= 2;
i--;
}
str[32] = '\0';
return(str);
}
【问题讨论】:
-
printf("%032b", input)还不够好? -
str[i] = value % 2应该是str[i] = value % 2 + '0' -
提示:你想用字符还是数字填充你的字符数组?
'0'和0不是一回事。 -
@tadman:
%b不是标准的 C - 尽管它可能相当广泛地可用。 -
永远不要在不打电话给
free的情况下打电话给malloc!