c - 警告 : passing argument 1 of ‘fscanf’ discards ‘const’ qualifier from pointer target type

标签 c

我正在打开一个文件,它不会改变,所以我在它前面放置了 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/

相关文章:

c - 从文件中读取文本行

c - 如何获取字符串的第 n 个字符?

有人可以解决这个代码块吗?

c - 如何在 C 中声明临时字符串以供重用?

c - 将char插入char数组C(string)

c - 为什么我在执行 printf ("%f",3/2) 时得到 2.168831?

c - tasklet 和 workqueue 有什么区别

将 uint8_t 数组转换为 uint16_t 数组(ASCII 到 Unicode)

c - ffmpeg.c 什么是 pts 和 dts ?这个代码块在 ffmpeg.c 中做了什么?

c - 指向函数指针的指针 - 表达式必须是可修改的左值