这个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;
}
其他功能都没问题,就是命令行参数读不进 展开
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;
}
其他功能都没问题,就是命令行参数读不进 展开
2个回答
展开全部
如果直接在编译器中运行(后面没有参数,文件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后面加上使用说明的输出信息)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询