c - 涉及将文件读入 C 中的 char 数组的警告

标签 c file pointers warnings

我有从文件编译和打印数据的代码,但它充满了警告,我无法修复它们。

void batchMode(char **c) {

     char *batchBuffer = NULL;
     size_t batchSize = 0;

     FILE *fp = fopen(c, "r");

     fseek(fp, 0, SEEK_END);
     batchSize = ftell(fp);

     rewind(fp);

     batchBuffer = malloc((batchSize + 1) * sizeof(*batchBuffer));

     fread(batchBuffer, batchsize, 1, fp);

     batchBuffer[batchSize] = 0;

     printf("%s\n", batchBuffer);

}

int main(int argc, char **argv){

    if (argc == 2)
          batchMode(&argv[1][0]);

     return 0;

}

警告包括: 从不兼容的指针类型传递批处理模式的参数 1

batchMode(&argv[1][0]);

应为“char **”,但参数的类型为 char *

无效batchMode(char **c)

从不兼容的指针类型传递 fopen 的参数 1

FILE *fp = fopen(c, "r");

预期为“const char *restrict”,但参数的类型为 char **

FILE *fopen (const char *_restrict_filename

最佳答案

  • 您可能想要更改batchMode 的方法签名以使用字符指针而不是指向指针的指针。
  • 因此,您应该将函数调用调整为 batchMode(argv[1]); 以将第一个程序参数作为参数传递
  • fread 的第二个参数必须是 batchSize 而不是 batchsize(注意大写的 S)
  • 由于batchBuffer是动态分配的,因此您应该在不再需要后添加一个free (batchBuffer);

因此,您稍加修改的代码可能如下所示:

#include <stdio.h>
#include <stdlib.h>


void batchMode(const char *c) {
    char *batchBuffer = NULL;
    size_t batchSize = 0;
    FILE *fp = fopen(c, "r");
    fseek(fp, 0, SEEK_END);
    batchSize = ftell(fp);
    rewind(fp);

    batchBuffer = malloc((batchSize + 1) * sizeof(*batchBuffer));

    fread(batchBuffer, batchSize, 1, fp);

    batchBuffer[batchSize] = 0;

    printf("%s\n", batchBuffer);

    free(batchBuffer);
}

int main(int argc, char **argv) {
    if (argc == 2)
        batchMode(argv[1]);

    return 0;
}

关于c - 涉及将文件读入 C 中的 char 数组的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60050988/

相关文章:

c - 为什么 ~0 >> 1 不移动位?

c - 在 C 中解析字符串到其他数据类型

file - Electron sheetjs从JSON下载生成的文件

c - 将指向函数指针的指针存储在 void* 中

C:无法访问结构中字符串数组中的元素

c++ - 成员函数如何传递 "this"指针

c - 为什么 Gimp 提示 "Premature end of file"?

c - 如何在 C 中解析带引号的 .csv 文件

php - 将多个文本文件上传到 MySQL

Java MappedByteBuffer.get() 出奇的慢