输入字母之后弹出Program received signal SIGSEGV, Segmentation fault.,不知为什么,调试时箭头停在st[p][j]=s[i];这一行,编译时没有报错
用DevC++写的,TDM-GCC 4.9.2 64-bit Release
代码目的是从一行英文子串中找到并输出最长最短单词
是新手,在oj上测试是显示运行错误
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[200001],st[201][101],t[101];
int main()
{
int p=0;
gets(s);
for(int i=0; i<strlen(s); i++)
if(s[i]==',')s[i]=' ';
for(int i=0; i<strlen(s); i++)
{
if(s[i]==' ')p++;
for(int j=0; s[i]!=' '; j++)
st[p][j]=s[i];
}
for(int j=1; j<=p; j++)
for(int i=1; i<p; i++)
if(strlen(st[i])>strlen(st[i+1]))
{
strcpy(t,st[i]);
strcpy(st[i],st[i+1]);
strcpy(st[i+1],t);
}
puts(st[p]);
puts(st[1]);
return 0;
}
char s[200001] = {0},st[201][101] = {0};
int j = 0;
for(int i=0; i<strlen(s); i++)
{
if(s[i]==' ')
{
p++;
j=0;
}
st[p][j++]=s[i];
}
for(j=0; j<p-1; j++)
for(i=0; i<p-j-1; i++)
if(strlen(st[i])>strlen(st[i+1]))
{
strcpy(t,st[i]);
strcpy(st[i],st[i+1]);
strcpy(st[i+1],t);
}
puts(st[p-1]);
puts(st[0]);
st[p][j]=s[i];在这块把这两个值,以及p,j,i都打印出来,进而分析问题。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m