出于某种原因,我的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;
}
我尝试了很多东西,但无法理解!
谢谢!
答案 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");