我有一个程序可以解析文本文件,并将其存储在指针数组中。我只有一个问题。我试图在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/