system("pause")为什么会影响到变量?

neilchi 2007-06-28 01:53:44
程序很长,只能贴一段出来:

int64_t *VName = 0;
//system("pause");
int acLen = 0;
VName = decodeOID(str+lennlen+1,parseVB.var_name_length,&acLen);
printf("\tObject Identifier: 1.3.");
int loop_val;
VName++;
for(loop_val = 0+1;loop_val<acLen;loop_val++)
{
printf("%d.",*VName++);
}
printf("\n");

就是注释的那句系统调用。当注释掉它的时候,decodeOID函数就只能算出错误的结果,恢复它就能算出正确结果。编译环境是XP下用gcc。

decodeOID()函数如下:

int64_t* decodeOID(char *val, int length, int *antualLength)
{

int temp;
int64_t temp64;
int64_t *reval, *originalReVal;
char *tempseg, *originalTemSeg;

if((reval = malloc(sizeof(int64_t)*length)) == NULL)
{ fprintf(stderr,"Cannot allocate space for reval\n");
system("pause");
exit(1);
}

if((tempseg = malloc(sizeof(char)*10)) == NULL)
{ fprintf(stderr,"Cannot allocate space for tempseg\n");
system("pause");
exit(1);
}
originalReVal = reval;
originalTemSeg = tempseg;
*antualLength = 0;
for(;length>0;length--)
{
temp = *val++;
(*antualLength)++;
if((temp & 0x80) != 0)
{
*tempseg++ = temp;
for(;(*val & 0x80) != 0 ;)
*tempseg++ = *val++;
*tempseg++ = *val++;
for(;originalTemSeg != tempseg;)
{ temp64 *= 128;
temp64 += (*originalTemSeg++)&0x7f;
length--;
}
*reval++ = temp64;
}
else *reval++ = temp;
}
reval = originalReVal;
return reval;
}

另外我发现好像不是系统调用会产生影响,我把那里写成printf("Kaka");之类的东西也会得到奇怪的结果。是不是VName的初始化有问题?
...全文
286 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
neilchi 2007-06-29
  • 打赏
  • 举报
回复
我搞定了,是对int64_t的操作有问题……
neilchi 2007-06-28
  • 打赏
  • 举报
回复
Chiyer:

我试试……
星羽 2007-06-28
  • 打赏
  • 举报
回复
楼主,你能给出一个我们能运行的精简而又能说明问题的代码吗?

这很难看,除非是遇到过同样问题的朋友
neilchi 2007-06-28
  • 打赏
  • 举报
回复
Chiyer:

decodeOID()里面的system("pause")是为了在exit(1)之前中断,不然我看不到fprintf打印的是什么就不知道是因为什么错误的。Dev-Cpp如果不这样强制system("pause")会直接退出去的。

cceczjxy:

我没看懂你的意思……pause的时候按任意键继续啊……
星羽 2007-06-28
  • 打赏
  • 举报
回复
你的dcodeOID里那些 system("pause"); 都是干什么的
cceczjxy 2007-06-28
  • 打赏
  • 举报
回复
问一下,你恢复它system("pause");后运行时,怎么中断这个pause?
neilchi 2007-06-28
  • 打赏
  • 举报
回复
换成getchar()会算出奇怪的结果……其实我并不需要在这里停下来,但是只有在这里放system("pause");的时候才能算正确
Inhibitory 2007-06-28
  • 打赏
  • 举报
回复
没遇到过这种情况,实在不行的话,换成getchar();可以让屏幕停下来.

69,373

社区成员

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

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