【发布时间】:2012-10-17 14:14:06
【问题描述】:
我有一个读取输入文件的函数,它应该修改 char** 和 int* 的内容。函数如下:
void
input_parser(arguments* args, char** input, int* files) {
char buffer[MAX];
FILE *fr;
fr = fopen(args->file,"r");
if (fr == NULL) {
printf("No correct input file was entered\n");
exit(0);
}
while(fgets(buffer,MAX,fr) != NULL) {
input[*files] = strtok(buffer,"\n");
(*files)++;
}
fclose(fr);
return;
}
我在主程序中定义了输入和文件如下:
char* input[25];
files = 0;
我调用函数如下:
input_parser(args, input, &files);
输入文件包含3行如下:
output1.xml
output2.xml
output3.xml
我注意到,在 while 循环期间,“当前”值被正确读取,但存储在所有输入 [*] 中,导致:
input[0] = output3.xml
input[1] = output3.xml
input[2] = output3.xml
如果有人知道这里出了什么问题,我将不胜感激。
【问题讨论】:
-
核心问题是你的文件读取功能,按照它的设计,必须要关心很多与文件处理无关的事情。由于您正在阅读某种 xml 文件,我将假设这些文件的格式和长度在编译时是已知的。正确的?如果是这样,则不需要动态内存。您应该能够在调用者中以真正的二维数组的形式分配所需的内存。然后将此二维数组及其大小传递给文件读取函数。确保函数不会越界。
标签: c fgets double-pointer