これは私が試したことですが、私の論理はtmp
左に31回シフトするとユーザ入力整数I
と比較され、値1または0がインデックスに挿入されますstr[0]
->str[31]
であり、Iヌルは、\0
を有するstr[32]
で終了する。整数をcでバイナリ文字列に変換する
ただし、セグメント違反が発生しています。
P.S.私はこの関数のパラメータを変更することは許されておらず、私の教授はstr
のサイズをメインで33に設定しました。どちらも変更できません。
void int2bitstr(int I, char *str) {
int tmp = 1 << 31;
do{
*str++ = !!(tmp & I) + '0';
} while(tmp >>= 1);
*str = '\0';
}
'int'が署名されています。あなたはそれを忘れましたか? –
私はいつも[Valgrind](https://www.valgrind.org)を使ってsegfaultsを理解しています –
Eugeneが言っていることを踏まえて、 'tmp'の値をコンソールに出力すると出力に驚くでしょう各反復は、特にループ出口節を考慮して行います。 – WhozCraig