fprintf没有写入文件

时间:2016-04-27 00:32:52

标签: c file-io

出于某种原因,我的fprintf语句什么也没做。我把printf语句放在它周围,看看它是否到达它(它确实如此),但我仍然无法弄清楚为什么没有发生。 这是我的代码:

#include <stdio.h>
int main(int argc, char *argv[])
{
  char c[8];
  FILE *fp;
  FILE *fp2;
  int i=0;
  int count,j,temp=0;

  fp = fopen(argv[0],"r");
  fp2 = fopen(argv[1], "w");

  for(i=0; i<50;i++)
    {
        count = fread(c,1,8,fp);
        if(((4<i)&&(i<10))||((14<i)&&(i<20))||((24<i)&&(i<30))||((34<i)&&(i<40))||(44<i)){
        continue;
    }
    else{
        for(j = 0; j<count; j++){
            c[j]=c[j]-'0';
            c[j]=c[j] << (count - (j+1));
            temp = temp | c[j];
      }
        fprintf(fp2, "%d\n", temp);
    }
  }

  fclose(fp);
  fclose(fp2);
  return 0;
}

我尝试了很多东西,但无法理解!

谢谢!

2 个答案:

答案 0 :(得分:2)

问题在于您使用argv。如果要传递两个参数,如

./myprog infile outfile

名称infile将位于argv[1],而不是argv[0]。同样适用于outfile,它位于argv[2]

fp = fopen(argv[1],"r");
fp2 = fopen(argv[2], "w");

为完整起见,该标准指定argv[0]的内容如下:

  

如果argc的值大于零,则argv[0]指向的字符串表示程序名称;如果程序名不能从主机环境获得,则argv[0][0]应为空字符。

答案 1 :(得分:0)

你抓错了论点。

argv[0]始终是正在运行的程序的名称。命令行选项以argv[1]开始传递程序。

您正在做的是读取可执行文件并写入输入文件。

所以不要这样:

fp = fopen(argv[0],"r");
fp2 = fopen(argv[1], "w");

你想要这个:

// check for the proper number of arguments first
if (argc < 3) {
    printf("usage: program file1 file2\n");
    exit(1);
}
fp = fopen(argv[1],"r");
fp2 = fopen(argv[2], "w");