我想将每个字符的二进制值存储在字符串中并将其存储在数组中。但是当我开始讨论像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的修改程序。
答案 0 :(得分:3)
str[8]='\0';
无效。如果声明为char str[8];
,则有效索引为0..7
答案 1 :(得分:3)
str[8]='\0'
导致缓冲区溢出,因为str
只有8个元素,而您正在尝试访问第9个元素。
编辑:我抱怨'/0'
,但正如@R ..通知我, 有效 - 但是,memset()
最终会将其参数转换为{{ 1}},所以我认为使用它没有任何意义,因此我假设作者希望将其更改为unsigned char
。
答案 2 :(得分:2)
str []只有8个字符的空格,但您可以访问第9个:str[8] = '\0';