gpt4 book ai didi

c - 用于分割二维字符串中字符串单词的函数的段错误

转载 作者:行者123 更新时间:2023-11-30 20:48:42 27 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数接受一个字符串并将所有单词放入二维数组中,但我收到了段错误错误。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

static int ft_countwords(char const *s, char c)
{
int nbr;
int i;

i = 0;
nbr = 0;
while (s[i])
{
if (s[i] != c)
{
nbr++;
while (s[i] != c)
i++;
}
else
{
while (s[i] == c)
i++;
}
}
return (nbr);
}

static char *ft_getword(char const *s, char c, int *start)
{
int i;
int word_size;
char *word;

i = 0;
word_size = *start;
while (s[word_size] && s[word_size] != c)
word_size++;
word = (char*)malloc(word_size - *start + 1);
while (s[*start] && s[*start] != c)
{
word[i] = s[*start];
i++;
*start++;
}
word[i] = '\0';
return (word);
}

char **ft_strsplit(char const *s, char c)
{
int row;
int i;
char **a;

a = NULL;
if (s)
a = (char**)malloc(sizeof(char*) * ft_countwords(s, c) + 1);
row = 0;
i = 0;
while (s[i] && row < ft_countwords(s, c))
{
if (s[i] != c && s[i])
{
a[row] = strdup(ft_getword(s, c, &i));
row++;
}
while (s[i] == c)
i++;
}
a[row] = '\0';
return (a);
}
int main(void)
{
int i;
char *test, **a;

test = strdup("__AAA_bbb__ccccc_DDDD___");
a = ft_strsplit((char const *)test, '_');
if (a)
{
i = 0;
while (a[i])
{
printf("%s\n", a[i]);
i++;
}
}
else
printf("(null)");
return (0);
}

我测试了前两个函数,它们可以工作,但我找不到 ft_strsplit 函数的问题。

gcc ft_strsplit.c && ./a.out
Segmentation fault (core dumped)

最佳答案

使用-g重新编译以获取核心转储中的调试信息。然后使用gdb来分析核心转储。您可以使用 where 获得回溯,然后可以使用 print 查看变量的值。您应该能够从那里找出问题所在。

或者,向您的程序添加大量日志记录,以弄清楚它在崩溃之前正在做什么,并且您应该能够不断缩小范围,直到找到问题为止。

关于c - 用于分割二维字符串中字符串单词的函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com