我有一个非常简单的函数,它只是将一个char转换为一个char *,它表示char的二进制值,0和1为chars。
char* stringToBin(char symbol) {
int pos = 0;
int value = (int) symbol;
int rest;
char* result = (char*) malloc(sizeof(char) * 9);
while(value > 0) {
if(value % 2 == 0) {
result[7-pos] = '0';
}
else {
result[7-pos] = '1';
}
pos++;
value = value / 2;
}
while(pos < 8) {
result[7-pos] = '0';
pos++;
}
result[8] = '\0';
puts(result);
puts(strlen(result));
return result;
}
我的问题是我无法打印char *的长度。打印整个char *工作完美,但不计算大小。我总是得到一个分段错误。我认为这个问题很简单,但我现在没办法解决。所以请给我一些缺失的提示;)
答案 0 :(得分:11)
问题不在于你的字符串的NUL终止,这很好。取而代之的是,
puts(strlen(result));
错了。 puts()
需要一个C字符串,并且你给它一个size_t
。改为写:
printf("%zu\n", strlen(result));
(这假定%zu
的C99格式说明符size_t
可用。如果不可用,则使用:
printf("%u\n", (unsigned)strlen(result));
代替。)