gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:31:51 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com