2014-06-10 12 views
-3

argv[1]argv[2]을 검사 할 때 열어서 쓸 수 없습니다! 제가 시험을 쓰지 않으면 모든 부분이 작동합니다. 명령 줄 매개 변수도 사용해야합니다.argv [1] 및 argv [2]를 열어 볼 때 열거 나 쓸 수 없습니다.

내가 잘못 뭐하는 거지

while (i < MAXADAT && kilep) 
    { 
     hianyzofajleredmeny = 1; 
     if ((argv[2][i] == '.' && argv[2][i + 1] == 'c' && argv[2][i + 2] == 's' && argv[2][i + 3] == 'v' && argv[2][i + 4] == '\0')) 
     { 
      hianyzofajleredmeny = 0; 
      kilep = 0; 
     } 
     i++; 

의 주요

int main(int argc, char **argv[]) 

일부?

+2

작동하지 않는 실제 코드를 게시하십시오. 여기에 당신의 긴 줄을'! strcmp (argv [2] + i, ".csv")로 대체 할 수 있습니다. –

+0

링크입니다! 전체 프로그램! 기본적으로 나는 cs 파일을 작성하는 것보다 cvs 파일을 사용하여 광고 작성을합니다. http://www.speedyshare.com/JaA7S/VEGLEGES-vegleg.txt – user3724530

+3

분명히 그 사이트에서 콘텐츠를 얻으려면 .exe를 다운로드해야합니다. Mac에서'.exe '가 작동하지 않는다는 사실과는 별개로, 이처럼 사소한 것으로 다운 로더가 필요한 사이트는 사용하지 않을 것입니다. –

답변

0

많은 마법이 관련되어 있지 않습니다. 실제로 코드가 무엇인지 알 수있는 충분한 코드를 표시하지는 않지만이 코드는 argv[1]argv[2]에 지정된 파일을 엽니 다.

#include <stdio.h> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    if (argc != 3) 
    { 
     fprintf(stderr, "Usage: %s file1 file2\n", argv[0]); 
     return 1; 
    } 
    char *dot1 = strrchr(argv[1], '.'); 
    if (dot1 == 0 || strcmp(dot1, ".csv") != 0) 
    { 
     fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[1]); 
     return 1; 
    } 
    FILE *fp1 = fopen(argv[1], "r"); 
    if (fp1 == 0) 
    { 
     fprintf(stderr, "%s: failed to open %s for reading\n", argv[0], argv[1]); 
     return 1; 
    } 
    char *dot2 = strrchr(argv[2], '.'); 
    if (dot2 == 0 || strcmp(dot2, ".csv") != 0) 
    { 
     fprintf(stderr, "%s: file %s is not a CSV file\n", argv[0], argv[2]); 
     return 1; 
    } 
    FILE *fp2 = fopen(argv[2], "w"); 
    if (fp2 == 0) 
    { 
     fprintf(stderr, "%s: failed to open %s for writing\n", argv[0], argv[2]); 
     return 1; 
    } 

    char buffer[1024]; 
    size_t nbytes; 

    while ((nbytes = fread(buffer, sizeof(char), sizeof(buffer), fp)) != 0) 
     fwrite(buffer, sizeof(char), nbytes, fp2); 

    fclose(fp1); 
    fclose(fp2); 
    return 0; 
} 

오류 체크 fclose(fp2); 실패하면 출력 파일이 성공적으로 작성되지 않습니다. 일반적으로 fclose(fp1) 오류를 검사하는 것이 덜 중요합니다.

오류보고 기능을 사용하면 오류보고 블록이 4 개가 아닌 한 줄씩 처리되지만 그 작업을 수행하는 기능을 작성하는 것은 처리 할 준비가 된 것보다 약간 복잡합니다. . 근본적으로 더 복잡하지는 않지만, 내가 당신에게 과부하를주지 않을 정도로 충분합니다. 이 코드는 매우 장황하다.

코드에서는 C99 또는 C11이 있다고 가정하므로 함수의 임의의 지점에서 변수를 선언 할 수 있습니다. C89가 닥친다면 (a) 25 년 대신에 15 년 밖에되지 않는 표준을 사용할 수있는 곳으로 업그레이드 할 때입니다. (b) 모든 변수 선언을 다음과 같이 이동해야합니다. 함수의 맨 위와 초기화로 할당을 할당으로 변경합니다.