gpt4 book ai didi

使用分隔符字符串将 char* 转换为 char**

转载 作者:行者123 更新时间:2023-11-30 18:11:56 25 4
gpt4 key购买 nike

嘿,我正在尝试将 char* 数组转换为 char** 二维数组。这是我一直在研究的功能,但我不断遇到段错误。看来 strsep 是导致此问题的原因,但我不确定我做错了什么,或如何解决此问题。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

char** oneD_to_twoD(char* str){
int cur_size = 20;
char* free_me = str;
char ** output = malloc(sizeof(char*)*sizeof(str));
int i = 0;
char *toks = "\n\t \r\v\f";
char* add_me = str;
str = strsep(&str, toks);
printf("%s\n", "here");
while(str != NULL){
printf("%s\n", "here");
strcpy(output[i], add_me);
add_me = str;
i++;
if(i == cur_size){
cur_size *= 2;
output = realloc(output, sizeof(char*)*cur_size);
}
str = strsep(&str, toks);
}
return output;
}
int main(int argc, char** argv){

char *str = malloc(sizeof("1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23"));
str = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23";
char** str2 = oneD_to_twoD(str);
for (int i = 0; i < 23; ++i)
{
printf("%s\n", str2[i]);
}
return 0;
}

最佳答案

双指针output的内存分配是错误的。这就是为什么你会遇到段错误

char **output=malloc(sizeof(str));
for(i=0;i<sizeof(str);i++)
{
output[i]=malloc(sizeof(char*));
}

这是初始化 char** 的正确方法。您还需要在 realloc 中应用这些更改。如果仍然存在问题,请告诉我。谢谢

关于使用分隔符字符串将 char* 转换为 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42800085/

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