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],输入字符串);
?