-2

我是 C 的新手,很难理解为什么它不能编译。该脚本应采用两个文本文件作为参数 - 读取第一个并将内容复制到第二个。我在编译时收到以下错误:

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;
}
4

1 回答 1

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 功能;)参数作为字符串数组传递给 main() 函数(char指针) argv[0] = 程序名 || argv[1] = 第一个参数 || argv[2] = 2nd argument etc... 正如已经提到的:你忘记了 fgetc() 的第一个参数(你的变量'c'就是)

于 2014-02-27T18:53:52.447 回答