c - 在C中将指针数组存储在指针数组中

标签 c arrays pointers

我有一个指针数组,我想将内容临时存储到另一个指针数组中,但我不知道如何,一切都会给我段错误。

类似于:

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/

相关文章:

c - 使用 (void *) 作为通用数据容器时的左值问题

java - 处理 JSONObject 以获取项目

c - 双指针队列,deQueue,enQueue

复制多维数组(指针)

c - 内存寻址和指针练习

c - C 中未调用异常处理程序

c - 为什么这段代码中的 var.name[i] 正在打印 stationto 值

c - 在C中为数组动态分配内存

java - 从字符串数组中选择一个随机元素?

java - 数组中最大的偶数