警告分配使指针从整数开始而没有强制转换

问题描述 投票:-1回答:2

我收到此警告“赋值使指针从整数开始而没有强制转换”(标记在代码片段中)代码可以正常工作,我在做什么错,我该如何解决此警告? thanx

 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
} ```
c pointers char
2个回答
0
投票

参数键的声明类似

char *keys[MAX_LEN]

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

char **keys

所以在此声明中

keys[i] = c;

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

所以编译器会发出警告,因为此分配没有意义。


0
投票

keys参数是MAX_LEN指向char的指针的数组。因此,如果要在此数组内分配一个值,则该值应该是指向字符类型的指针。这里,getc()返回一个字符,而不是指针。

我认为您期望的是void Read_Keys(char *keys),并带有以下调用代码:

char keys[MAX_LEN];

Read_Keys(keys);

因此,当调用keys时,您的char *数组会衰减为Read_Keys指针。在Read_Keys内,您可以使用索引来访问所有数组元素,例如keys[2]

显然,您还需要将数组长度传递给Read_Keys,因此该函数知道哪个数组索引有效而哪个数组索引无效。

© www.soinside.com 2019 - 2024. All rights reserved.