奇怪的错误:在C中处理字符数组时中止陷阱

| 我想将每个字符的二进制值存储在字符串中,并将其存储在数组中。但是,当我开始搞ѭ0之类的功能时,我无法控制调试。
#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的修改程序。     
已邀请:
str[8]=\'\\0\'
导致缓冲区溢出,因为
str
仅包含8个元素,而您正尝试访问第九个元素。 编辑:我抱怨
\'/0\'
,但是正如@R ..告诉我的那样,它是有效的-但是,
memset()
最终会将其参数转换为
unsigned char
,所以我认为使用它没有任何意义,所以我假设作者将其更改为
\'\\0\'
。     
str[8]=\'\\0\';
无效。如果声明为
char str[8];
,则有​​效索引为
0..7
    
str []仅可容纳8个字符,但您访问的是第9个字符:
str[8] = \'\\0\';
    

要回复问题请先登录注册