我收到此警告“赋值使指针从整数开始而没有强制转换”(标记在代码片段中)代码可以正常工作,我在做什么错,我该如何解决此警告? 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
} ```
参数键的声明类似
char *keys[MAX_LEN]
编译器将其调整为以下声明
char **keys
所以在此声明中
keys[i] = c;
左操作数的类型为char *
,它是指针,而右操作数的类型为char
。
所以编译器会发出警告,因为此分配没有意义。
您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
,因此该函数知道哪个数组索引有效而哪个数组索引无效。