gpt4 book ai didi

c - 为 char ** 段错误赋值

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:38 25 4
gpt4 key购买 nike

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

#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) 打印出我想要的字符,但在下一行出现段错误。我非常确定调用另一个函数不是问题,我认为这一定是我取消引用 array_strings 的方式。非常感谢任何帮助。

最佳答案

问题出在

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

你创建一个变量

char** array_strings;

现在指向的是一些垃圾,调用即可查看当前地址

print("%p\n", array_strings);  

我强烈建议用NULL初始化array_strings,因为一旦你能收到一个指向内存的指针,你就可以写,它会写到某个地方,在那里您的其他数据可以存储,您将销毁这两个数据。如果它是 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 ** 段错误赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46778303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com