我有从文件编译和打印数据的代码,但它充满了警告,我无法修复它们。
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/