我有一个指针数组,我想将内容临时存储到另一个指针数组中,但我不知道如何,一切都会给我段错误。
类似于:
char *records[6], *temp[6];
for(int i=0; i<6; i++){
fgets(temp[i], 999, fp); // Filling array with opened file line by line
records[i]=temp[i];
}
当我使用 *temp 时,记录会完全填满文件的最后一行。
最佳答案
您忘记为读入的每一行分配内存。请注意,您的数组 char *temp[6]
为 6 个指针保留了内存,但它没有为要读取的位置保留任何内存。这些指针将指向。所以 temp
的每个成员,例如第一个 temp[0]
指向不允许写入的地方。因此,第一个 fgets(temp[i], 999, fp)
将产生未定义的行为,很可能是段错误。
解决这个问题的方法是读入一个缓冲区,然后根据行的长度预留内存并复制内容:
char *records[6] = { 0 };
char buffer[999];
for(int i=0; i<6; i++){
if (fgets(buffer, 999, fp) == NULL)
break;
records[i] = malloc(strlen(buffer) + 1);
strcpy (records[i], buffer);
}
进一步请注意,应考虑 fgets
的返回值,如果出现 EOF
等错误,则返回值为 NULL
。此外,错误的 i++
而不是 i+
也已得到纠正。
关于c - 在C中将指针数组存储在指针数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46961894/