拆分字符串(测试时出现Segmentation Fault)

时间:2014-03-06 12:45:21

标签: c string

我正在尝试从给定输入中提取子字符串, 例如,如果我在char *中有“你好我在这里” 我想得到:

char tab[0] = "Hello";
char tab[1] = "I";
/// etc

但它给了我一个Segfault,有什么帮助?

以下是我分割char *

的功能
#include <stdlib.h>

char    **str_to_wordtab(char *str)
{
  int   i;
  int   j;
  int   k;
  char  **tab;

  i = 0;
  k = 0;
  tab = malloc(my_strlen(str) * sizeof(*tab));
  while (str[k] != '\0')
    {
      j = 0;
      tab[i] = malloc(my_strlen(str) * sizeof(*tab[i]));
      while (str[k] != ' ')
        tab[i][j++] = str[k++];
      tab[i][j] = '\0';
      if (str[k] == ' ')
        k++;
      i++;
    }
return (tab);
}

以下是测试它的主要内容:

int     main(int ac, char **av)
{
  char  **tab;
  int   i;

  i = 0;
  tab = str_to_wordtab("Hello I am here");
  while (tab[i])
    {
      my_putstr(tab[i++]);
      my_putstr("\n");
    }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这不是你想要的分裂,而是分裂的字符串。 考虑使用空格作为分隔符的strtok

关于您的段错误,以下是一些主要内容:

    如果您忘记重新复制字符串中的while (str[k] != '\0')
  • \0可能会有危险
  • 您的后期增量也可能是错误的来源

答案 1 :(得分:0)

你的内在while循环应如下所示:

  while (str[k] != ' ')
  {
    tab[i][j++] = str[k++];

    if  (str[k-1] == 0)
    {
      tab[++i] = 0 ;
      return tab ;
    }
  }