嘿我正在尝试将char *数组转换为char ** 2d数组。这是我一直在努力的功能,但我不断遇到seg故障。似乎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;
}
答案 0 :(得分:-1)
作为双指针的output
的内存分配是错误的。这就是你得到分段错误的原因
char **output=malloc(sizeof(str));
for(i=0;i<sizeof(str);i++)
{
output[i]=malloc(sizeof(char*));
}
这是初始化char **的正确方法。您还需要在realloc中应用这些更改。如果仍有问题,请告诉我。感谢