繁体   English   中英

分割字符串(测试时出现分段错误)

[英]Splitting a string (Segmentation Fault on test)

我正在尝试从给定输入中提取子字符串,例如,如果我在char *有“你好,我在这里” 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");
    }
}

谢谢你帮我

这不是您想要的除法,而是字符串的分割。 考虑以空格作为分隔符的strtok

关于段故障,以下是一些线索:

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

您的内部while循环应如下所示:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM