我正在尝试将C中的函数写入return
,该函数与传递给函数的字符串相反。
传入字符串后,我声明一个本地char []
来填充字符串的反面。
但是,当我编译程序时,我会收到一条警告,指出warning: function returns address of local variable return test;
我是否可以从C?
中的函数返回局部变量指针char *reverseString(char *str)
{
int i, j;
char test[strlen(str)];
if(str == 0)
return;
for(i = 0, j = strlen(str); i < strlen(str), j >= 0; i++, j--)
str[j] = test[i];
return test;
}
答案 0 :(得分:3)
字符串需要更多空间,strlen()
为您提供字符数,但c字符串使用额外字符标记字符串的结尾,'\0'
ascii {{ 1}}字符,因此始终需要nul
来复制字符串。
在解除引用后,您1 + strlen(otherString)
检查str
。这没有意义,请先检查NULL
,然后致电NULL
。
以这种方式使用strlen()
并不是一个好主意,因为在c中字符串长度没有存储在任何地方,调用strlen()
基本上就这样计算字符串
strlen()
在那里你可以看到终止size_t strlen(const char *string)
{
size_t count = 0;
while (*string++ != '\0')
count++;
return count;
}
的重要性,以及为什么你不应该在一个循环中为'\0'
调用长度不变的字符串。
如果返回局部变量的地址,它将无法正常工作,因为它会在函数返回时被释放,因此您需要使用动态分配,因为存在{{1}这使得它很容易,所以在你的情况下它会是这样的
strlen()