gpt4 book ai didi

我们可以返回非指针函数的值吗

转载 作者:行者123 更新时间:2023-11-30 21:06:13 25 4
gpt4 key购买 nike

 char* xpx(char* src) 
{
char result[sizeof(src)];

strcpy(result,src);

return result;

}

上述代码中有 2 个错误。1) strcpy 将 src 作为参数传递,但它不像 str 那样合法是一个指针。

我无法找到另一个。你能帮我吗?

最佳答案

看看strcpy文档:

char *strcpy( char *restrict dest, const char *restrict src );

Copies the null-terminated byte string pointed to by src, including the null terminator, to the character array whose first element is pointed to by dest. The behavior is undefined if the dest array is not large enough. [...] (important but not relevant to the question so omitted part)

所以strcpy确实需要2个指针。没关系。这不是一个错误。

要找到bug请注意(仔细想想,这是符合逻辑的):dest数组必须足够大。这里的“足够大”是什么意思?好吧,因为函数从 src 复制字符串。 ,包括空终止符 dest这意味着dest必须至少为 src 中字符串的长度+ 1 表示空终止符。这意味着strlen(src) + 1 .

sizeof(src)sizeof(int*) 相同这是平台上字符指针的大小。指针的大小。不是你想要的。

下一个错误是函数返回自动存储对象的地址,即 result大批。这意味着当函数退出时,数组将不再存在,因此函数返回指向不再有效的对象的指针。解决这个问题的方法是使用 malloc分配数组。另一种是更改xpx的签名类似于strcpy的东西其中提供了目标数组。

所以总结它们,你需要一些东西:

char* result = malloc(strlen(src) + 1);

另一个错误(是的,从技术上讲,这不是一个错误,但在我看来,从语义上讲,这是一个错误)是 src应该是const char*类型。

潜在问题和错误的另一个来源是输入行为不佳,例如如果src不是空终止的,但是这个函数对此应该承担多少责任是有争议的。

关于我们可以返回非指针函数的值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50222678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com