C程序运行偶尔有异常

离水的鱼儿 2017-12-21 11:04:16
unsigned char inData[]="ah^1/@哈"; //原始数据
int strLen= strlen((char *)inData); //原字符串数据的长度
printf("%s",inData);
printf("\n-----------------------------\n");

unsigned char *outData=new unsigned char[strLen];//创建原始数据大小的数组
unsigned char *p=inData;


unsigned char k=0x80; //与运算 128 10000000
unsigned char *q=outData;

//字符转二进制

Str_Two(inData,strLen,outData);
for (int i = 0; i < strLen; i++,p++)
{
k = 0x80;
for (int j=1; j<=8; j++, k >>= 1)
{
if (*p & k)
{
// printf("1");
*q='1';
q++;
}
else
{
//printf("0");
*q='0';
*q++;
}

}
//printf(" \n");

}
q++;
*q=0;

int TwoLen=strlen((char *)outData)-1; //二进制数据的长度
printf("\n-------------------------------------------------------------\n");
for(int i=0;i<TwoLen;i++)
{
printf("%c",outData[i]);
}
这个字符转二进制 有时候运行是正常的,有时候报异常,这个是什么异常啊~~~我看异常应该是内存异常,但是怎么找到啊,实在找不到~~~~~~
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
离水的鱼儿 2017-12-22
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
unsigned char *outData=new unsigned char[strLen + 1];//多分配一个字节,用于存储字符串结束符 '\0'
//...
outData[strLen] = '\0';
int TwoLen=strlen((char *)outData)-1; //strlen长度是依靠字符串结束符 '0'判断的
谢谢兄弟,我是用指针最后放的 '\0',问题确实是在数组的长度上,outData是存放二进制数据的,数字的长度要在原始数据的长度上*8, 忘了*8了。不过还是谢谢大兄弟~!
幻夢之葉 2017-12-22
  • 打赏
  • 举报
回复
unsigned char *outData=new unsigned char[strLen + 1];//多分配一个字节,用于存储字符串结束符 '\0'
//...
outData[strLen] = '\0';
int TwoLen=strlen((char *)outData)-1; //strlen长度是依靠字符串结束符 '0'判断的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧