我有一个指针数组,我想暂时将内容存储到另一个指针数组中,但我不确定如何,一切都给我分段错误。
类似的东西:
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时,记录完全被我文件的最后一行填充。
答案 0 :(得分:2)
您忘记为读入的每一行分配内存。请注意,您的数组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
的返回值,如果遇到NULL
之类的错误,则为EOF
。此外,更正了错误i++
而非i+
。
答案 1 :(得分:1)
你应该为行分配内存 - 目前两个数组中的指针都没有指向任何东西(此外,它们是单元化的,意味着它们的值未定义)。
您可以动态地(使用malloc
)执行此操作,也可以声明一个2d char数组,其中每个子数组(行)都是一个字符串。
char records[6][999] = { 0 }, temp[6][999] = { 0 };
...