strlen(char *)上的分段错误,但char * IS终止

时间:2013-01-05 10:53:20

标签: c char segmentation-fault

我有一个非常简单的函数,它只是将一个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 *工作完美,但不计算大小。我总是得到一个分段错误。我认为这个问题很简单,但我现在没办法解决。所以请给我一些缺失的提示;)

1 个答案:

答案 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));

代替。)