一个奇怪的程序错误!

发布于 2022-07-21 11:30:42 字数 1979 浏览 9 评论 6

我最近写一个程序,在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

乖乖公主 2022-07-22 19:04:36

原帖由 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包括运行程序的名称,如果还是不相信,最好查下资料,看看书

白昼 2022-07-22 19:00:34

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);

    }

思念满溢 2022-07-22 18:49:19

除了3个参数,命令也得算一个

极度宠爱 2022-07-22 18:40:53

例如:你输入的a.out 也算是一个参数的
a.out 1.txt 2.txt 3.txt
这是4个参数

月寒剑心 2022-07-22 16:19:09

f1,f2,f3的声明呢?

顾北清歌寒 2022-07-22 12:21:34

把 if(argc<3)改成
if (argc != 4)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文