2014-02-27 6 views
-2

저는 C가 생소하고 이것이 컴파일되지 않는 이유에 대해 고심합니다. 스크립트는 두 개의 텍스트 파일을 args로 가져와야합니다. 첫 번째 파일을 읽고 그 파일을 두 번째 파일로 복사하십시오. 나는 그것이 하나 개의 인수를 가지고 내 강의 슬라이드에 표시 있기 때문에는 fgetc 더 인수를해야한다고 말했습니다 이유는 확실하지 않다C 컴파일 오류 - "fgetc & fputc가 너무 적은 인수"

[email protected]:/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’ 

: 나는 컴파일에서 다음과 같은 오류를 받고 있어요?

#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; 
} 
+2

무엇이'$ 1'과'$ 2'입니까? –

+1

또한 오류 메시지의 줄 번호 (각각 4와 5)는 붙여 넣은 코드와 일치하지 않습니다. –

+0

뭔가 원본에서 올바르게 복사되지 않습니다. 오류는'mycat.c : 4 : 3'이라고하지만, 여러분의'fgetc'은 여러분이 보여주는 코드에서 매우 다른 행에 있습니다. – lurker

답변

3

나는 처음부터 코딩 했으므로 심심했습니다. 지금 테스트 한 결과 작동했습니다. ./programname sourcefilename 같이 DestinationFileName 귀하의 주요 실수가 인수 처리입니다 : 어쩌면 당신은

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

하면 프로그램 종류 콘솔의 호출에 (내가 사용하는 모든 알고리즘은 당신과 같은 후) 내 코드에서 실수를 얻을 수 있습니다 , 또는 전혀 들어 본 적이없는 완전히 새로운 C 기능입니다.) 인수는 main() 함수에 문자열 배열로 전달됩니다 (char 포인터). argv [0] = program name || argv [1] = 첫 번째 인수 || argv [2] = 2 번째 인수 등 ... 그리고 앞에서 언급했듯이 : fgetc()의 첫 번째 인수를 잊었습니다 (변수 'c'는 그대로)