所以我有一个数组不断被新值覆盖。例如,这是输出:
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]);
}
提前致谢!
答案 0 :(得分:1)
您将数组中的每个索引指向相同的内存地址。我认为你最好使用strcpy
答案 1 :(得分:1)
没有分配内存来存储从文件读入的行。是的,已分配内存,但instruc
的类型为char **
,程序正在使用此内存,就像instruc
类型为char *
一样。
如果您希望存储指向文件内存中所有记录的指针,则必须分配不仅要将数据存储在文件中,而且还需要内存来存储指向每条记录开头的指针。
在此代码中,文件记录的长度固定为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);
}