我正在尝试创建一个从 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/