C - 字符串返回 NULL

标签 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,但是当我尝试打印 < em>s2 在 remove_chars 函数中,它按照预期的方式打印出来。

最佳答案

您正在返回局部变量的地址。

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

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

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

使用完毕后,不要忘记释放调用函数中的内存。

关于C - 字符串返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53162316/

相关文章:

python - 对需要另一个扩展的 Python 进行 C 扩展

c - 将十六进制数流式传输为十进制

arrays - 需要的公式 : Sort array to array -"zig-zag"

python - 在 Python 中尝试匹配正则表达式时如何处理变音符号

java - 如何使用正则表达式或任何方法从较大的字符串中抓取字符串的一部分

c - 如何到达路径中的上一个文件夹?

c - 在C中的框架中输入二维数组

c# - 图像对应用程序内存使用的影响

python - 导入自己的数据,例如 MNIST 或 CIFAR10 load_data()

Java while 循环测验不会重置