Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的数组正在被相同的值覆盖?_C_Arrays_String - Fatal编程技术网

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

C 我的数组正在被相同的值覆盖?,c,arrays,string,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_

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

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]);
}
//指令数组
字符**指令=malloc(numLines*200);
c=fgets(输入字符串,200,在_文件中);
while(c!=NULL){
指令[i]=输入字符串;
i++;
c=fgets(输入字符串,200,在_文件中);
}
//打印出阵列中的内容
i=0;

对于(i=0;i您将数组中的每个索引指向相同的内存地址。我认为您最好使用strcpy没有分配内存来存储从文件中读取的行。是的,分配了内存,但是
指令
属于
字符**
类型,并且程序正在使用此内存,就像
指令
i一样字符*
类型的

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

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

要存储指向每个记录开头的指针,需要这样做-:

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

您没有为字符串分配空间。从技术上讲,他是在分配空间,只是没有使用它,因为他指向另一个字符串,而不是编辑:实际上您是right@AK4749:不,他正在为字符串指针分配空间,而不是字符串本身。如果我使用'strcpy(instruc[I],inputString)“我有一个分段错误。你需要首先为每个索引分配空间。嗯,我对C非常陌生,所以我不确定你的意思……我在声明时需要malloc inputString,还是每次我在指令[I]中放入一些东西时都需要malloc?在为每个指令[I]调用strcpy之前,你可以malloc。好的,让我看看我是否正确。所以,我
instruc[I]=malloc(200);strcpy(指令[i],输入字符串);