2012-10-24 38 views
3

请帮我解决一些问题。使用fscanf扫描字符串C

该文件包含:

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而不是&a[0]更方便。

你写它的方式,你传递相同(这就是为什么它的作品),但该值都有不同类型:这不是一个指向char了,但一个指针数组char s。这不是fscanf()所期望的,所以编译器会警告它。

有关说明,请参阅:https://stackoverflow.com/a/2528328/856199

+0

非常感谢!现在我懂了! :) – kimalser