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

sou*_*ver 0 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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法打印char*的长度.打印整个char*工作完美,但不计算大小.我总是得到一个分段错误.我认为这个问题很简单,但我现在没办法解决.所以请给我一些缺失的提示;)

小智 11

问题不在于你的字符串的NUL终止,这很好.代替,

puts(strlen(result));
Run Code Online (Sandbox Code Playgroud)

是错的.puts()期待一个C字符串,你给它一个size_t.改为写:

printf("%zu\n", strlen(result));
Run Code Online (Sandbox Code Playgroud)

(这里假定C99格式说明%zusize_t是可用的.如果不是这样,那么使用:

printf("%u\n", (unsigned)strlen(result));
Run Code Online (Sandbox Code Playgroud)

代替.)