gpt4 book ai didi

c - 我的数组正在被相同的值覆盖?

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:47 24 4
gpt4 key购买 nike

所以我有一个不断被新值覆盖的数组。例如,这是输出:

instruc[0] = PRINTNUM
instruc[1] = PRINTNUM
instruc[2] = PRINTNUM

其中 PRINTNUM 应该是数组中的最后一个元素,前两个元素应该是其他元素。

这是我针对特定部分的代码:

    //array of instructions
char** instruc = malloc(numLines * 200);

c = fgets(inputString, 200, in_file);

while (c != NULL){
instruc[i]=inputString;
i++;
c = fgets(inputString, 200, in_file);
}

//print out what's in the array
i=0;
for (i=0; i<numLines; i++){
printf("instruc[%d] = %s\n", i, instruc[i]);
}

提前致谢!

最佳答案

没有分配内存来存储从文件中读入的行。是的,分配了内存,但 instrucchar ** 类型,程序正在使用此内存,就好像 instrucchar * 类型。

如果您希望存储指向文件中所有记录的指针,则必须分配内存,不仅要将数据存储在文件中,而且还需要内存来存储指向每条记录开头的指针。

在这段代码中,文件记录的长度固定为 200 字节。 char ** 的变量指向的指针数组并不是绝对必要的——只需将 char * 指针添加 200 个字节即可确定下一条记录的开始从文件中读取数据的开始。

要存储指向每条记录开头的指针,需要这样的东西:

char **fileRecPtrs = malloc(sizeof(char *) * numLines);
char *instruc = malloc(200 * numLines);

然后在循环中读取文件的每条记录-:

c = fgets(instruc, 200, in_file);     
while (c != NULL) {
fileRecPtrs[i] = instruc;
instruc += 200;
i++;
c = fgets(instruc, 200, in_file);
}

关于c - 我的数组正在被相同的值覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134523/

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