我有一个解析文本文件的程序,并将其存储在指针数组中。我只有一个问题。我正在尝试在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错误。我非常确定调用另一个函数不是问题,我认为它必须是我解除引用array_strings
的方式。非常感谢任何帮助。
答案 0 :(得分:1)
问题在于
*(*(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
为。