这个c语言代码哪里出问题了?一运行就崩溃

#include<stdio.h>
int main(int b,char *argu[])
{
int i,j,k,n,l;
char c[500]={0},a[500][500]={0},m[500]={0};

FILE *in,*out;
in=fopen(argu[1],"r");
out=fopen(argu[2],"w");

fgets(c,100,in);

i=j=k=0;
while(c[i]!='\0')
{
while(c[i]!=' ')
{
a[j][k]=c[i];
k++;
i++;
}
a[j][k]='\0';
j++;
i++;
k=0;
}
n=j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i][0]==a[j][0])
{
for(k=0;a[j][k]!='\0';k++)
{
if(a[i][k]!=a[j][k])
break;
else
continue;
}
if(a[j][k]=='\0')
{
for(l=0;a[j][l]!='\0';l++)
a[j][l]=0;
}
}
}
}

for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
if(a[k+1][0]<a[k][0])
{
for(j=0;a[k][j]!='\0';j++)
m[j]=a[k][j];
m[j]=0;
{
if(a[k+1][0]==0)
{
for(j=0;a[k][j]!=0;j++)
a[k][j]=0;
}
else
for(j=0;a[k+1][j]!='\0';j++)
{
a[k][j]=a[k+1][j];
}
a[k][j]=0;
}
for(j=0;m[j]!='\0';j++)
{
a[k+1][j]=m[j];
}
a[k+1][j]=0;

}

}

for(i=1;i<n+1;i++)
{
if(a[i][0]==0)
continue;
else
{
for(j=0;a[i][j]!='\0';j++)
{
if(a[i][j+1]!=0)
fprintf(out,"%c",a[i][j]);
else
fprintf(out,"%c ",a[i][j]);

}
}
}

fclose(in);
fclose(out);
return 0;
}

其他功能都没问题,就是命令行参数读不进

如果直接在编译器中运行(后面没有参数,文件in用的是第一个参数*argu[1],文件out用的是第二个参数*argu[2]),那么就会崩溃。因为没有参数,那么文件打开就失败了,而继续对打开失败的文件指针进行操作就崩溃了。

正确的用法是,编译成.exe文件后,在DOS窗口中进入这个.exe文件所在目录,然后输入“这个.exe文件名 输入文件名字 输出文件名 回车”才行。比如我编译好的文件名是1.exe,输入文件名是input.txt,准备输出的文件叫out.txt,那么就不会崩溃了,如图


要避免没有输入参数崩溃的情况,可以在程序中进行文件打开判断,在

in=fopen(argu[1],"r");
out=fopen(argu[2],"w");

后面增加打开判断

if(in == NULL || out == NULL) exit(1);

就不至于没有参数的时候崩溃,而是直接退出(或者也可以在这个if后面加上使用说明的输出信息)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-17
你的 fopen 应该创建文件 用"wr"
相似回答