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

时间:2017-03-15 02:30:03

标签: c

嘿我正在尝试将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;
}

1 个答案:

答案 0 :(得分:-1)

作为双指针的output的内存分配是错误的。这就是你得到分段错误的原因

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

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