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