我有一个程序可以解析文本文件,并将其存储在指针数组中。我只有一个问题。我试图在char **对象中存储一个字符串数组,但是每当我给char **赋值时,就会得到seg错误。

#include "database.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char **get_values(int recipe_num, char *file) {
    int placehold_num=recipe_num;
    char *text=parse_recipes(file);
    int num_recipes=count_recipes(file);
    char **array_strings;
    int index=-1;
    for (int i=0;*(text+i)!='\0';i++) {
        if (*(text+i)=='R' && *(text+i+1)=='e' && *(text+i+6)==':' && (text+i+7)==' ') {
            i+=13;
            index++;
            for (int j=0;*(text+i+j-1)!='\n';j++) {
                printf("%c",*(text+i+j));
                *(*(array_strings+index)+j)=*(text+i+j);
            }
        }

    }

}

这将从*(text+i+j)中打印出我想要的字符,但在下一行中会出现seg faults。我非常肯定调用另一个函数不会有问题,我想这一定是因为我取消引用的方式。任何帮助都非常感谢。

最佳答案

问题出在

*(*(array_strings+index)+j)=*(text+i+j);

创建变量
char** array_strings;

它现在指向一些垃圾,您可以通过调用
print("%p\n", array_strings);

我强烈建议您通过array_strings初始化NULL,因为一旦您可以接收到指向内存的指针,您可以在其中写入,它将写入到某个位置,您的其他数据可以存储在该位置,并且您将销毁这两个数据。如果是NULL的话,你总是会收到segfault。所以,现在您正试图将一个值*(text+i+j)赋给内存中的一个随机位置。
做你想做的事,你必须
char** array_strings = (char**)malloc(n * sizeof(char*));

其中n是需要的字符串数量,然后在循环中
array_strings[some_your_index] = text+i+j;

array_strings[some_your_index]现在是char*,正如text+i+j一样。

关于c - 给char ** seg fault赋值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46778303/

10-10 13:23