gpt4 book ai didi

c - 双指针内的值未正确更新 (C)

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:01 25 4
gpt4 key购买 nike

我有一个读取输入文件的函数,应该修改 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

如果有人知道这里出了什么问题,我将不胜感激。

最佳答案

该函数将局部变量buffer 的地址存储到input 数组中的每个元素:您需要复制strtok() 返回的值。目前的代码是未定义的行为,因为一旦 input_parser() 返回,buffer 就超出了范围,即使不是这样,逻辑也不正确。

如果您有strdup(),您只需使用它:

input[*files] = strdup(strtok(buffer,"\n")); /* NULL check omitted. */

否则 malloc()strcpy()。请记住在不再需要时 free() input 的元素。

初始化 input 以便能够确定哪些元素指向有效字符串:

char* input[25] = { NULL };

关于c - 双指针内的值未正确更新 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12936349/

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