免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1598 | 回复: 6
打印 上一主题 下一主题

一个奇怪的程序错误! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-10 11:56 |只看该作者 |倒序浏览
我最近写一个程序,在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);

    }
不知有那位高手能知道问题出在那里吗?

论坛徽章:
0
2 [报告]
发表于 2006-04-10 13:07 |只看该作者
把 if(argc<3)改成
if (argc != 4)

你输入两个参数时, argc为3, 程序运行, 当取第三个参数时, 当然segmentation fault了.

论坛徽章:
0
3 [报告]
发表于 2006-04-10 13:07 |只看该作者
f1,f2,f3的声明呢?

论坛徽章:
0
4 [报告]
发表于 2006-04-10 14:16 |只看该作者
例如:你输入的a.out 也算是一个参数的
a.out 1.txt 2.txt 3.txt
这是4个参数

论坛徽章:
0
5 [报告]
发表于 2006-04-10 14:49 |只看该作者
除了3个参数,命令也得算一个

论坛徽章:
0
6 [报告]
发表于 2006-04-10 16:20 |只看该作者
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);

    }

论坛徽章:
0
7 [报告]
发表于 2006-04-10 18:10 |只看该作者
原帖由 guh 于 2006-4-10 16:20 发表
f1,f2,f3我是作为全局变量定议的,我一直未弄明白,argc参数是怎样计算的,a.out 1.txt 2.txt 3.txt是四个参数,它是从0开始计算还是从一开始计算,a.out 1.txt 2.txt 3.txt是四个参数,argc是等于4还是等于3。 ...

这个好像C的书籍中都有的吧,楼上的几位都说了,argv[0]代表运行程序名称,然后开始才是参数,argc包括运行程序的名称,如果还是不相信,最好查下资料,看看书
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP