0

我有一个非常非常简单的函数,它只是将 char 转换为 char*,它表示 char 的二进制值,其中 0 和 1 作为字符。

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* 效果很好,但不计算大小。我总是遇到分段错误。我认为问题很简单,但我现在没有得到它。所以请给我缺少的提示;)

4

1 回答 1

11

问题不在于字符串的 NUL 终止,这很好。反而,

puts(strlen(result));

是错的。puts()需要一个 C 字符串,而你给它一个size_t. 改为:

printf("%zu\n", strlen(result));

(这假设 C99 格式说明符%zu可用size_t。如果不是,则使用:

printf("%u\n", (unsigned)strlen(result));

反而。)

于 2013-01-05T10:55:59.467 回答