我正在打开一个文件,它不会改变,所以我在它前面放置了 const 关键字。不过,编译器给了我这个警告。为什么 fscanf 不接受 const 文件?
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
int main(void){
const FILE *realNumbers=fopen("float.txt", "r");
if(realNumbers==NULL){
fprintf(stderr, "Could not open the file.\n");
return 1;
}
unsigned int realNumbersSize=1;
float *realNumbersArray=malloc(realNumbersSize*sizeof(float));
if(realNumbersArray==NULL){
fprintf(stderr, "Could not allocate memory.\n");
return 2;
}
for(int i=0;fscanf(realNumbers, "%f", &realNumbersArray[i])==1;i++){
realNumbersSize++;
realNumbersArray=realloc(realNumbersArray, realNumbersSize*sizeof(float));
if(realNumbersArray==NULL){
fprintf(stderr, "Could not reallocate memory.\n");
return 3;
}
}
free(realNumbersArray);
fclose(realNumbers);
return 0;
}
最佳答案
您的文件不会改变。但 FILE
不是您的实际文件。它是一种根据您在代码中对文件所做的操作来跟踪文件状态的结构。它不能是 const,因为 fscanf 需要更新它(例如跟踪读取位置)。 – 凯勒姆
关于c - 警告 : passing argument 1 of ‘fscanf’ discards ‘const’ qualifier from pointer target type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60821806/