gpt4 book ai didi

c - Return 从指针生成整数,无需强制转换(简单的 for 循环)

转载 作者:行者123 更新时间:2023-11-30 21:33:31 24 4
gpt4 key购买 nike

为什么这段 C 代码会返回标题中的警告?

char n_zeroes(int n) {
char str[n];

int i;
for (i = 0; i < n; i++) {
str[i] = '0';
}

return str;
}

最佳答案

您的函数被声明为返回 char,并且您返回一个 char 数组。但是,即使您修复了应该为 char * 的返回值,它仍然是错误的,因为您不应该返回局部变量,而是将数组作为参数传递给函数,如下所示

void
n_zeroes(int n, char *str)
{
for (int i = 0 ; i < n ; ++i)
str[i] = '0';
}

但这本质上是相同的

memset(str, '0', n);

另请注意,仅用零填充的该数组并不代表字符串,使其成为可与 str* 函数一起使用或传递给 *printf() 的有效字符串 函数带有 "%s" 说明符,它在末尾需要一个额外的元素,其特定值为 '\0'0.

正如您从错误中可以理解的那样,您的代码正在从没有显式转换的整数创建指针。这是因为您可以这样做,即将整数转换为指针。这是否正确是完全不同的事情,但该标准也允许许多可能被滥用的事情。这就是 的伟大之处,能力越大,责任越大。

关于c - Return 从指针生成整数,无需强制转换(简单的 for 循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292863/

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