C-字符串返回为NULL

时间:2018-11-05 21:14:26

标签: c arrays string char

我正在尝试创建一个从 k 位置开始删除 l 元素的函数。删除字符后,我的函数返回了另一组字符。   String_length 是一个返回字符串长度的函数。

删除字符

char * remove_chars(char s1[], int k, int l)
{
    int j = 0;
    if(string_length(s1) + 1 < k || string_length(s1) + 1 < l)
        return 0;
    else
    {
        char s2[100];
        for(int i = 0; s1[i] != '\0'; ++i)
        {
            if((i <= k - 1) || (i > k + l - 1 ))
            {

                s2[j] = s1[i];
                ++j;
            }
        }
        s2[j] = '\0';
        return s2;
    }
}

问题是,当我在 main 中调用 remove_chars 函数后,它返回为 null ,但是当我尝试打印<在 remove_chars 函数中的em> s2 ,它会像预期的那样将其打印出来。

1 个答案:

答案 0 :(得分:0)

您要返回的是本地变量的地址。

s2是本地定义的数组。然后return s2时,数组衰减为指向第一个元素的指针。函数返回后,s2将超出范围,并且它使用的内存不再有效。使用指向超出范围的变量的指针会取消undefined behavior

动态分配内存,以便在函数返回时仍然有效。

char *s2 = malloc(strlen(s1)+1);

在使用完函数后,请不要忘记free在调用函数中。