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

#include<stdio.h>intmain(intb,char*argu[]){inti,j,k,n,l;charc[500]={0},a[500][500]={0... #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;
}

其他功能都没问题,就是命令行参数读不进
展开
 我来答
Arthurzss
2013-12-17 · TA获得超过1661个赞
知道小有建树答主
回答量:496
采纳率:100%
帮助的人:239万
展开全部

如果直接在编译器中运行(后面没有参数,文件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后面加上使用说明的输出信息)。

百度网友ea437e0779
2013-12-17
知道答主
回答量:9
采纳率:0%
帮助的人:4.4万
展开全部
你的 fopen 应该创建文件 用"wr"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式