运行时错误([SIGSEGV, Segment fault] 下标越界、无效的指针访问或者其它更糟糕的错误。帮忙修改一下~~
答案:2 悬赏:40 手机版
解决时间 2021-02-27 23:41
- 提问者网友:不爱我么
- 2021-02-27 02:23
#include
#define MAXnumber 100
void inverse(int n,char str[]);
void inverse(int n,char str[])
{
char ch;
while((ch=getchar())!='\n')
{
str[n]=ch;
n++;
}
n--;
while(n>=0)
{
printf("%c",str[n]);
n--;
}
}
void main()
{
int n=0;
char abc[MAXnumber];
inverse(n,abc);
getch();
}
最佳答案
- 五星知识达人网友:鸽屿
- 2021-02-27 03:10
你这个程序运行的时候只要字符的个数超过100了就会出现段错误,出现段错误的原因为你只定义了一个长度为100的数组,但你运行的时候键入了超出了100个字符,解决办法:
1、将“#define MAXnumber 100”中的100改成一个足够大的数;
2、动态分配内存;
以下为动态分配内存的源码:
#include
#include
//#define MAXnumber 100
void inverse(int size,char str[]);
void inverse(int size,char str[])
{
char ch;
int n = 0;
while((ch=getchar())!='\n')
{
str[n]=ch;
n++;
if(n >= size)
{
break;
}
}
n--;
while(n>=0)
{
printf("%c",str[n]);
n--;
}
printf("\n");
}
void main()
{
// int n=0;
// char abc[MAXnumber];
printf("input the number of character to be inversed: ");
int size = 0;
scanf("%d\n", &size);
char *abc = (char*)malloc(size*sizeof(char));
inverse(size,abc);
free(abc);
}
3、使用STL中的容器,比如std::vector,std::stack,它们都有自动扩大容量的功能。
stack具有LIFO(后进先出)的性质,你可以用栈来实现你程序中的功能,以下是使用栈的程序源码:
#include
#include
int inverse(std::stack &str_stack);
int inverse(std::stack &str_stack)
{
char ch;
while((ch=getchar())!='\n')
{
str_stack.push(ch);
}
while(!str_stack.empty())
{
printf("%c",str_stack.top());
str_stack.pop();
}
return 0;
}
int main()
{
stack str_stack;
inverse(str_stack);
printf("\n");
return 0;
}
全部回答
- 1楼网友:街头电车
- 2021-02-27 03:15
没看懂什么意思?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯