0

char を、0 と 1 を char として持つ char のバイナリ値を表す char* に単純に変換する非常に単純な関数があります。

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

%zu(これは、C99 形式指定子が使用可能であることを前提としていsize_tます。使用できない場合は、次を使用します。

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

代わりは。)

于 2013-01-05T10:55:59.467 に答える