0

各文字のバイナリ値を文字列に格納し、それを配列に格納したいと考えています。しかし、のような関数をいじり始めるとmemset、デバッグを制御できなくなります。

#include <stdio.h>
#include <string.h>
int main()
{
char str[8];
char *ptr = "Hello";
int i;

for(; *ptr != 0; ++ptr)
{
    printf("%c => ", *ptr);

    /* perform bitwise AND for every bit of the character */
    for(i = 7; i >= 0; --i) 
        if(*ptr & 1 << i) 
          str[7-i]='1';
        else
          str[7-i]='0';
        //(*ptr & 1 << i) ? putchar('1') : putchar('0');
    str[8]='\0';    
    printf("%s\n",str);
    memset(str,'/0',8);        
}
return 0;
}

出力:

H => 01001000
e => 01100101
l => 01101100
l => 01101100
o => 01101111
Abort trap

誰かが光を放つことができればいいですね。出力を取得していますが、トラップが発生しています。

礼儀: これは、仲間のスタック フェロー ユーザー @Athabaska の修正プログラムです。

4

3 に答える 3

3

str[8]='\0';無効です。宣言が次のchar str[8];場合、有効なインデックスは次のとおりです。0..7

于 2011-04-15T17:41:21.273 に答える
3

str[8]='\0'str要素が 8 つしかなく、9 番目の要素にアクセスしようとしているため、バッファ オーバーフローが発生します。

編集:私は について不満を言いました'/0'が、@R.. が私に通知したように、それ有効です - しかし、memset()最終的にはそのパラメータを に変換するunsigned charので、それを使用する意味はないと思います。に変更し'\0'ます。

于 2011-04-15T17:42:13.200 に答える
2

str[] には 8 文字分のスペースしかありませんが、9 番目にアクセスします。str[8] = '\0';

于 2011-04-15T17:42:21.487 に答える