我是C的新手并且很难理解为什么这不会编译。脚本应该将两个文本文件作为args - 读取第一个文件并将内容复制到第二个文件。我在编译时遇到以下错误:
root@debian:/home/kevin# gcc -Wall mycat.c -o mycat
mycat.c: In function ‘main’:
mycat.c:4:3: error: too few arguments to function ‘fgetc’
In file included from mycat.c:1:0:
/usr/include/stdio.h:533:12: note: declared here
mycat.c:5:5: error: too few arguments to function ‘fputc’
我不确定为什么说fgetc应该采取更多的论据,因为它在我的演讲幻灯片中显示了一个参数?
#include <stdio.h>
#include <stdlib.h>
int main(){
const char∗ ifilename = $1;
FILE∗ istream = fopen(ifilename, ”r”);
if (istream == NULL) {
fprintf(stderr, ”Cannot open %s \n”,ifilename);
exit(1);
}
const char∗ ofilename = ”$2”;
FILE∗ ostream = fopen(ofilename, ”w”);
if (ostream == NULL) {
fprintf(stderr, ”Cannot open %s \n” , ofilename);
exit(1);
}
int = c;
while ((c = fgetc(istream)) != EOF)
fputc(ostream);
return 0;
}
答案 0 :(得分:3)
我很无聊所以我从头开始编码。现在测试它,它的工作原理。也许你可以从我的代码中得到你的错误(毕竟我使用的算法与你的相同)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
FILE* filesrc = NULL;
FILE* filedest = NULL;
int c = 0;
if(argc != 3){
fprintf(stderr,"Usage: programname sourcefile destinationfile");
return EXIT_FAILURE;
}
if((filesrc = fopen(argv[1],"r")) == NULL){
fprintf(stderr,"Cannot open sourcefile!");
return EXIT_FAILURE;
}
if((filedest = fopen(argv[2],"w")) == NULL){
fprintf(stderr,"Cannot open destinationfile!");
return EXIT_FAILURE;
}
while ((c = fgetc(filesrc)) != EOF)
fputc(c,filedest);
return EXIT_SUCCESS;
}
在控制台中调用程序类型:./programname sourcefilename destinationfilename 你的主要错误是你的参数处理,或者它是一个我从未听说过的全新的c特性;)参数作为字符串数组(char指针)传递给main()函数argv [0] =程序名称|| argv [1] =第一个参数|| argv [2] =第二个参数等... 正如已经提到的:你忘记了fgetc()的第一个参数(你的变量'c')