2

我对带有文件输入的 char** 有一些问题。我正在做一个我们正在处理 PGM 文件的项目。我正在尝试使用 char** 从文件中获取标题,但它所做的只是返回 null。它将运行我获得尺寸并将它们返回到屏幕的代码,但是当我尝试打印标题时,我只是得到(null)了我的输出

//创建字符**

char **header=(char**)malloc(2*sizeof(char*));

//文件输入

FILE * fin;
fin=fopen(argv[1], "rb");
fscanf(fin, "%s", *header);
printf("%s", header[0]);
fclose(fin);

我不能 100% 确定我的创作header是否正确,或者我的打印是否header正确。任何帮助将非常感激。

4

2 回答 2

2

malloc(2*sizeof(char*));为 2 个字符指针分配足够的内存。这可能不足以保持标题。

实际上,查看pgm spec,似乎 2 个字符将保存“幻数”,但您仍需要分配 3 个字符,以便您可以保存fscanf将产生的尾随 NULL。

所以尝试摆脱一级间接:

char *header=malloc(3*sizeof(char));
于 2013-11-19T19:32:14.353 回答
2
char *header = malloc(2*sizeof(char));
fscanf(fin, "%s", header);

但是然后 2 个字符非常小 - 只有当你做了一个 fread 或者不会超过你正在读入的分配的标题空间大小的东西时才会真正起作用......或者可能会增加“标题”的大小,所以你可以更适合。

编辑- 指针间接

我们使用指针指向分配的内存——这就是*header = malloc.... 我们使用指针将参数传递给我们希望更改其值的函数,这就是为什么如果您要char *在另一个函数中分配 a 并让调用者知道它,您需要使用指向指针的指针:char **

于 2013-11-19T19:32:34.740 回答