PTA有一例出现运行时错误怎么办

请问大家pta运行时错误改如何解决
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello

#include
#include
int main()
{
    char str[500000],words[500][5000];
    gets(str);
    int i, lenth, word = -1, start, j,h,end=0;
    lenth = strlen(str);
    for (i = 0; i < lenth;i++){
        if((str[i]==' '&&str[i+1]!=' '&&i!=lenth-1)||(str[i]!=' '&&i==0)){
            word++;
            if(i!=lenth-1&&i!=0){
                start=i+1;
            }
            else if(i==0){
                start=0;
            }
                
        }
        else if(((str[i]!=' ')&&(str[i+1]==' ')&&(i!=lenth-1))||(i==lenth-1&&str[i]!=' ')){
            if(word==-1)end=0;
            else{
                end=i;
                for(j=start,h=0;j1;j++,h++)
                    words[word][h]=str[j];
                end=0;
            }    
        }
    }
    for (i = word; i >= 0;i--){
        if(i!=0)
            printf("%s ", words[i]);
        else
            printf("%s",words[i]);
    }
    return 0;
}

系统试例只有最后一个出错 错误原因是运行时错误,我一直在更改words[][]内的数 不知道这两个用多少合适 太大会全部出现段错误。


char str[500000],words[500][5000];
挪到main前面
万一是250000个"a "呢?
char str[500001],*words[250000];//没必要保存250000个单词,先保存指向250000个单词开头的指针,输出时到空格或0结束

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^