【发布时间】:2021-10-26 14:26:12
【问题描述】:
所以我有这个功能:
char *ft_string(char *s, int *i) {
int j;
char *res;
j = *i;
res = NULL;
while (s[j] && s[j] != ' ' && s[j] != '\"' && s[j] != '\'' && s[j] != '$')
{
if (s[j] == '\\')
ft_remove_char(s, j);
j++;
}
res = ft_substr(s, *i, j - *i);
(*i) = j - 1;
return (res);
调用 ft_remove char:
void ft_remove_char(char *s, int i){
char *ret;
int j;
ret = malloc((int)ft_strlen(s) * sizeof(char) + 1);
if (ret == NULL)
return ;
j = -1;
while (++j < i)
ret[j] = s[j];
i = j;
while (s[++j])
{
ret[i] = s[j];
i++;
}
ret[j - 1] = '\0';
if (s)
free(s);
s = ret;
当 ft_remove_char 返回时,s 值在 ft_string 中消失。 我不知道我做错了什么,我在堆上分配了一个字符串,然后让 s 指向它。
【问题讨论】:
-
先格式化你的代码。
-
2.描述谁的功能应该做什么。示例输入和示例输出。
-
您可以调用更多
ft_*函数。所有这些都可能导致问题 -
在
ft_remove_char()内部,您无法更改ft_string()的s,因为您通过值传递它。 -
s 在 ft_remove_char 返回后立即被销毁,所以我确信问题来自那里。