我的数组被覆盖了相同的值?

时间:2013-04-21 18:11:47

标签: c arrays string

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

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]);
}

提前致谢!

2 个答案:

答案 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);
}