我正在尝试从给定输入中提取子字符串,
例如,如果我在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");
}
}
感谢您的帮助。
答案 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 ;
}
}