不兼容的指针类型fscanf [C]

时间:2016-03-15 16:06:12

标签: c

linkedList *createFreqTable(char *file) {
    int i = 0;
    int k = 0;
    int fCount = 0;
    int sizeLimit = 128;
    struct tnode *nodes = malloc(128 * sizeof(struct tnode));
    char *character;

    /* Open a file stream */
    FILE *stream;
    /* Reads in the file */
    stream = fopen(file, "r");
    /* Scan the file until EOF */
    while (fscanf(file, "%c", &character) != EOF) {
        ...

收到警告信息passing argument 1 of 'fscanf' from incompatible pointer type.有关代码错误的任何线索吗?

2 个答案:

答案 0 :(得分:1)

%c转换说明符需要char *类型的参数。您已将变量character声明为类型char *。因此,&character调用中的表达式 scanf的类型为char **

character声明为常规char,而不是char *

char character;
...
while(fscanf(stream, "%c", &character) == 1) {

请注意,您希望将character作为指针,只需将&放入scanf来电,因为{{1}在这一点上,没有指向任何有意义的东西。

修改

chqrlie指出了我第一次错过的其他一些错误 - 你应该将character而不是stream作为file的第一个参数传递,你应该比较结果为fscanf而不是1(因为您正在扫描单个项目)。

答案 1 :(得分:1)

编译器抱怨,因为您将file而不是stream传递给fscanf。您还应该传递格式char的{​​{1}}地址,而不是%c的地址。将char*的定义更改为character

为了获得更好的性能,使用char character;代替fgetc()一次一个字节地读取文件会更有效。

然后,您可以将fscanf()定义为character

int