fprintf没有写入文件

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

#include  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; } 

我尝试了很多东西,但无法搞清楚!

谢谢!。

问题是你使用argv 。 如果你想传递两个参数,就像在

 ./myprog infile outfile 

名称infile将在argv[1] ,而不是在argv[0] 。 对于outfile ,它将在argv[2]

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

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

如果argc的值大于零,则argv[0]指向的字符串表示程序名称; 如果程序名不能从主机环境获得,则argv[0][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");