求大神帮解决一下C语言的问题,找不到错误了.编译器通过了.但是提交错误

#include
#include
int main()
{
char str[][4]={"\0"};
char string[30],temp;
int i=0,j,n,k,m,p=0;
int l=0;
scanf("%d",&n);
p=n-1;
for(k=0;k {
scanf("%s",&str[k]);
l=strlen(str[k]);
for(m=0;m for(i=0;i for(j=i;j {
if(str[m][i]>str[m][j])
{
temp=str[m][i];
str[m][i]=str[m][j];
str[m][j]=temp;
}
}
}
for(i=0;i {
for(j=0;j {
printf("%c ",str[i][j]);
}
printf("%c",str[i][l-1]);
if(p>i)
{
printf("\n");//这个换行的问题解决了.之后是最后的空间问题
}
}
return 0;
}

图片说明

for循环全部乱了,楼主截个图,或者把代码放在代码标识里

图片说明你再看下

把代码放到http://paste.ubuntu.com/,然后链接给我看看,直接看错误很累的,最好能自己跑一跑程帮你看

没改代码前我运行楼主的代码,报错:
stack around the variable 'str' was corrupted
明显是数组越界操作了

感觉有两个问题:
1.申请内存方式不对,应该动态申请
2.里面多了一层循环

#include <stdio.h>
#include<string.h>
void main()
{
    //char str[][4]={"\0"};应该动态申请内存,这样相当于就是char str[1][4] = {"\0"}
    char string[30],temp;
    int i=0,j,n,k,m,p=0;
    int l=0;
    scanf("%d",&n);
    char **str;
    str = (char **)malloc(n*sizeof(char *));
    p=n-1;
    for(k=0;k<n;k++) 
    {
        str[k] = (char *)malloc(4 * sizeof(char));
        scanf("%s",str[k]);
        l=strlen(str[k]);
        //for(m=0;m<n;m++)这个地方逻辑有问题,是一句句输入的
        for(i=0;i<l-1;i++)
            for(j=i;j<l;j++)
            {
                if(str[k][i]>str[k][j])
                {
                    temp=str[k][i];
                    str[k][i]=str[k][j];
                    str[k][j]=temp;
                }
            }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<l-1;j++)
        { 
            printf("%c ",str[i][j]);
        }
        printf("%c",str[i][l-1]);
        if(p>=i)
        {
            printf("\n");//这个换行的问题解决了.之后是最后的空间问题
        }
    }
}

注:如果还是不能AC,楼主就改成输入一句输出一句试试