我正在尝试创建一个从 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 ,它会像预期的那样将其打印出来。
答案 0 :(得分:0)
您要返回的是本地变量的地址。
s2
是本地定义的数组。然后return s2
时,数组衰减为指向第一个元素的指针。函数返回后,s2
将超出范围,并且它使用的内存不再有效。使用指向超出范围的变量的指针会取消undefined behavior。
动态分配内存,以便在函数返回时仍然有效。
char *s2 = malloc(strlen(s1)+1);
在使用完函数后,请不要忘记free
在调用函数中。