c++问题 检查没错 运行时提示遇到问题需要关闭,是字符倒序的程序

来源:百度知道 编辑:UC知道 时间:2024/06/11 05:58:33
#include"stdio.h"
void main()
{
char n[80],*p,m[80];
int i,t,q;
gets(n);
for(i=0;i<80;i++)
{
if(n[i]=='\0')
*p=n[i-1];
}
for(t=0;t<i;t++)
{
m[t]=*p;
*p--;
}
m[i]='\0';
puts(m);
}

1、2楼的全不行,你可以试试看。

“运行时提示遇到问题需要关闭”一定是你出发了不可预知的错误。

for(i=0;i<80;i++)
{
if(n[i]=='\0')
*p=n[i-1]; //p指向哪了?你给他指向的地址负值?
}

p的指向是系统随意分配的,你这样可能写到系统区,形成错误!
*p=malloc(80*sizeof(char));//先为p分配一个内存快。就行,别忘了释放此块呀(delete());

还有一般防止这个问题,我们都这样声明:

int *p=NULL;

#include"stdio.h"
void main()
{
char n[80],*p,m[80];
int i,t,q;
gets(n);
for(i=0;i<80;i++)
{
if(n[i]=='\0')
*p=n[i-1];
}
for(t=0;t<i;t++)
{
m[t]=*p;
p--; //注意这里改的
}
m[i]='\0';
puts(m);
}

楼上的答案应该可以了
*p--是该内存地址存放的值减1,p--是移动指针所指的内存地址