为什么会测不出来啊?

输入字母之后弹出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