我写了一个代码,用定界符分割字符串。我希望函数获取一个字符串并返回其分割后的字符串。
实际上,除了一件事之外,它是可行的。当我给字符串“测试”,它的工作原理。但是当我输入字符串“ 1234 4567”时,我可以访问值“ 4567”,但不能访问“ 1234”。(垃圾值。)“ 1234 2345 3456 ...”也仅在第一个参数“ 1234”中导致垃圾值。
我以为两次使用malloc()会在同一指针中引起问题,但事实并非如此。我的代码有什么问题?
char **ft_set_char(char *str)
{
int i;
int j;
int k;
char *str_c;
char **ret;
k = 0;
j = 0;
ret = (char **)malloc(10);
str_c = (char *)malloc(5);
i = 0;
while (*(str + i) != '\0')
{
if (*(str + i) == ' ')
{
*(str_c + k) = '\0';
k = 0;
*(ret + j) = str_c;
j++;
i++;
str_c = (char *)malloc(5);
}
*(str_c + k) = *(str + i);
i++;
k++;
}
*(str_c + k) = '\0';
*(ret + j) = str_c;
*(ret + j + 1) = NULL;
return (ret);
}
ret = (char **)malloc(10);
这是不正确的,因为它分配10个字节而不是10个char *
元素。它应该是:
ret = malloc(10 * sizeof *ret);
其他不相关的问题,但应注意最佳实践:
malloc
10
和等魔术数字5
。对于前者,至少要使用#define MAX_ARRAY_SIZE 10
。对于后者,您可以从原始副本中找出要复制的字符串的确切大小,这str
将使您的代码更健壮,以防它与更长的子字符串一起使用。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句