2013-05-14 6 views
0

텍스트 파일의 데이터를 읽고 배열로 복사하려고하는데 코드가 작동하지 않습니다. 이 코드입니다 :데이터를 배열로 읽을 수 없습니다.

#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
    int i; 

    FILE *data; 
    data = fopen(argv[1], "r"); 

    ....... 

    fclose(data); 
} 

내가

data = fopen("(the file name)", "r"); 

data = fopen(argv[1], "r");` 

를 교체 할 때 그것은 작동합니다.

이 전체 코드

#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
int i; 
i=0; 
FILE *data; 
data = fopen(argv[1], "r"); 

while (!feof(data)) { 
    fscanf(data, "%i", &aa[i]); 
    i++; 
} 

fclose(data); 
printf("%i\n", aa[0]); 
} 

하고 텍스트 파일

3 
2 1 
2 2 
2 3 
+8

프로그램을 실행할 때 어떤 명령 줄 인수를 전달합니까? –

+2

또한, 아마도 fopen에 대한 호출이 실패한 후 ERRNO의 값은 무엇입니까? – xaxxon

+1

argv [1] +에있는 내용을보기 위해 디버그해야합니다. 실제로 argv [1]가 있는지 테스트해야합니다. 더 많은 문서를 읽어보십시오. – MisterJ

답변

3

당신은 항상 예를 ​​들어, 기본 오류 합리적으로 실패 할 수 있습니다 무엇에 대한 코드를 확인, 작성해야입니다 :

#include <stdio.h> 
#include <errno.h> 

int main(int argc, char *argv[]) 
{ 
    int i; 
    FILE *data; 

    if (argc < 2) 
    { 
     fprintf(stderr, "Missing arguments: %s\n", usage); 
     exit(1); 
    } 

    data = fopen(argv[1], "r"); 
    if (data == NULL) 
    { 
     fprintf(stderr, "fopen('%s') failed, errno = %d, argv[1], errno); 
     exit(2); 
    } 

    ....... 

    fclose(data); 

    return (0); 
} 

이렇게하면 fopen이 실패하면 (a) 충돌하지 않고 (b) 그렇게 될 것입니다. 나에게 유용한 정보 이유가 파일이 열리지 않았습니다.

+2

만일 OP가 그 오류를 검사한다면, 그는 또한 'argc> 1'을 점검하는 것이 낫다. –

+0

@Adrian : 좋은 지적 - 더 많은 오류 검사가 추가되었습니다. –

+0

이것은 좋은 정보이지만 답변이 아닙니다. 그래서 fopen과 errno의 반환 값을 주석에 넣었습니다. – xaxxon

-1

코드를 실행하는 동안 filename을 전달해야합니다.

./a.out file.txt. 

file.txt가 존재하지 않으면 세그먼트 화 오류로 오류가 발생합니다.

당신이주는 어떤 데이터를주고 그것의 file.txt를에
#include <stdio.h> 
int main(int argc, char *argv[]) 
{ 
    int i; 
    int j = 0; 
    int aa[100]; //declare an int array to store the data, as you are retrieving using %i 
    i=0; 
    FILE *data; 
    data = fopen(argv[1], "r"); 

    while (!feof(data)) { 
     fscanf(data, "%i", &aa[i]); 
     i++; 
    } 
    i--; 
    fclose(data); 
    for(j; j < i; j++) 
     printf("%i\n", aa[j]); 
} 

작업이 코드를 사용해보십시오.

및 file.txt를 ./a.out 패스 을 실행하는 동안

file.txt를이 같은 폴더에 있는지 그것을 참조하거나 당신은 통과 할 수있는 전체 경로를

+1

OP는 그가 그 일을하고 있다고 주장합니다. 그래서 그것이 수수께끼 인 이유입니다. –

+0

파일이 같은 폴더에 존재합니까? – Daemon

+0

지금 같지 않은 경우 오류를 지정하십시오. – Daemon

1
  1. 을 제공 현재 디렉토리에서 사용할 수없는 파일

  2. 은 '하면 fopen'

컴파일와 GCC -g -Wall main.c를

및 사용 후 인수로 널 (null)에 대한

  • 점검을 파일 이름으로 유효한 파일 디렉토리를 부여 오류를 식별하는 gdb 디버거

  • 관련 문제