一个奇怪的程序错误!
我最近写一个程序,在Linux系统的命令方式下进行,程序有三个参数:输入文件、输出文件和运行错误记录文件,编译时没有任何错误提示,但在运行时,如果输入数据只有一个时,能按要求提示错误输入,输入三个数据时,能正常运行,但输入只有两个数据时,程序却异常终止。显示:
Segmentation fault
主程序如下:
main(int argc,char *argv[])
{
if(argc<3)
{
printf("请正确输入: change 输入文件 输出文件 错误输出文件!n");
exit(1);
}
strcpy(f1,argv[1]);
strcpy(f2,argv[2]);
strcpy(f3,argv[3]);
if ((in=fopen(f1,"r"))==NULL)
{
printf("不能打开输入文件!n");
exit(1);
}
if ((out=fopen(f2,"r"))!=NULL)
{
printf("输出文件已存在,请另指定一个文件名!n");
fclose(out);
exit(1);
}
else
if ((out=fopen(f2,"w"))==NULL)
{
printf("不能创建输出文件!n");
exit(1);
}
if ((errorout=fopen(f3,"r"))!=NULL)
{
printf("错误输出文件已存在,请备份清除后重新运行!n");
fclose(out);
exit(1);
}
else
if ((errorout=fopen(f3,"w+"))==NULL)
{
printf("不能创建错误输出文件!n");
exit(1);
}
不知有那位高手能知道问题出在那里吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这个好像C的书籍中都有的吧,楼上的几位都说了,argv[0]代表运行程序名称,然后开始才是参数,argc包括运行程序的名称,如果还是不相信,最好查下资料,看看书
f1,f2,f3我是作为全局变量定议的,我一直未弄明白,argc参数是怎样计算的,a.out 1.txt 2.txt 3.txt是四个参数,它是从0开始计算还是从一开始计算,a.out 1.txt 2.txt 3.txt是四个参数,argc是等于4还是等于3。如果我将程序定为三个参数,即a.out 1.txt 2.txt,即没有这种现象。
main(int argc,char *argv[])
{
if(argc<2)
{
printf("请正确输入: change 输入文件 输出文件!n");
exit(1);
}
strcpy(f1,argv[1]);
strcpy(f2,argv[2]);
if ((in=fopen(f1,"r"))==NULL)
{
printf("不能打开输入文件!n");
exit(1);
}
if ((out=fopen(f2,"r"))!=NULL)
{
printf("输出文件已存在,请另指定一个文件名!n");
fclose(out);
exit(1);
}
else
if ((out=fopen(f2,"w"))==NULL)
{
printf("不能创建输出文件!n");
exit(1);
}
除了3个参数,命令也得算一个
例如:你输入的a.out 也算是一个参数的
a.out 1.txt 2.txt 3.txt
这是4个参数
f1,f2,f3的声明呢?
把 if(argc<3)改成
if (argc != 4)
你输入两个参数时, argc为3, 程序运行, 当取第三个参数时, 当然segmentation fault了.