首页 > 解决方案 > 警告 - 赋值使指针从整数而不进行强制转换

问题描述

我收到了这个警告“赋值使指针从没有强制转换的整数”(在代码段中标记)代码工作正常,我做错了什么,我该如何解决这个警告?谢谢

 void Read_Keys(char *keys[MAX_LEN])  //Read the keys from input file 
{
    char c,Fname[MAX_LEN];

    gets(Fname);
    FILE *fptr = (fopen(Fname, "r")); // Input stream pointer assume

    if(fptr == NULL)
    {
        printf("No Such File...");
        exit(EXIT_FAILURE);
    }
    if(fptr) //if not empty get in
    {
        int i = 0;
        while((c = getc(fptr)) != EOF) //while loop copies each char from file
        {                             //to keys array
**          keys[i] = c; //          **                      WARNING IS HERE
            i++;
        }
        keys[i+1] = END; //ending point assume
    }
    fclose(fptr); //Close file for security issues
} ```

标签: cpointerschar

解决方案


参数键声明为

char *keys[MAX_LEN]

编译器将其调整为以下声明

char **keys

所以在这个声明中

keys[i] = c;

左操作数的类型char *是指针,而右操作数的类型是char

所以编译器会发出警告,因为这个赋值没有意义。

我怀疑无论如何参数声明不正确。看来您的意思是以下声明

void Read_Keys(char ( *keys )[MAX_LEN]);

那就是您正在尝试将二维数组传递给函数。但无论如何,这段代码片段

    int i = 0;
    while((c = getc(fptr)) != EOF) //while loop copies each char from file
    {                             //to keys array
        keys[i] = c; //          **                      WARNING IS HERE
        i++;
    }
    keys[i+1] = END; //ending point assume
}

无效,因为将所有文件写入一条记录而不是记录数组是正确的。


推荐阅读