2012-10-24 2 views
3

일부 문제를 해결하는 데 도움을주십시오.C에서 fscanf를 사용하여 문자열 검색

파일에는 다음이 포함

AAAA 111 BBB 
CCC 2222 DDDD 
EEEEE 33 FF 

코드는 다음과 같습니다

int main() { 
    FILE * finput; 

    int i, b; 
    char a[10]; 
    char c[10]; 

    finput = fopen("input.txt", "r"); 

    for (i = 0; i < 3; i++) { 
     fscanf(finput, "%s %i %s\n", &a, &b, &c); 
     printf("%s %i %s\n", a, b, c); 
    } 

    fclose(finput); 
    return 0; 
} 

코드는 작업을 수행합니다. 그러나 다음과 같은 오류가 발생합니다.

format «%s» expects argument of type «char *», but argument 3 has type «char (*)[10] 
format «%s» expects argument of type «char *», but argument 5 has type «char (*)[10] 

종류가 잘못 되었습니까? 뭐가 문제 야? 자신의 첫 번째 요소에 대한 포인터

답변

4

배열 이름 붕괴, fscanf()로 배열의 주소를 통과하기 위해, 그래서 당신은 단순히 직접 배열을 전달해야는 :

:

fscanf(finput, "%s %i %s\n", a, &b, c); 

이 동일합니다

fscanf(finput, "%s %i %s\n", &a[0], &b, &c[0]); 

그러나 분명히 &a[0] 대신 a을 사용하는 것이 더 편리합니다.

당신이 그것을 쓴 방법은, 같은 을 (작동 그 이유는) 전달하는,하지만 값이 다른 유형이 있습니다 : 그것은 더 이상 char에 대한 포인터가 아니다, 그러나에 대한 포인터 배열은 char이다. 그것은 fscanf()이 기대하는 것이 아니기 때문에 컴파일러는 경고합니다.

설명을 보려면 https://stackoverflow.com/a/2528328/856199

+0

고맙습니다! 이제 알았어! :) – kimalser