gpt4 book ai didi

c - 这也是 Ansi C 中的未定义行为吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:58 25 4
gpt4 key购买 nike

如果这样的代码,它一定是undefined behavior .

char *String = "Stack Overflow"; //undefined behavior

因此,以下也是未定义的行为吗? 但我的大部分引用书都是这样写的!

char *Print (char *String)
{
return String;
}

int main (void)
{
printf ("%s", Print("Stack Overflow"));
return 0;
}

为了避免编写未定义行为的代码,为什么不这样做呢?

char *Print (char String[16])
{
return String;
}

int main (void)
{
printf ("%s", Print("Stack Overflow"));
return 0;
}

最佳答案

If the code like this, it must be an undefined behavior.

char *String = "Stack Overflow"; //undefined behavior

一定是?为什么? 不,不是。将字符串文字分配给指向非 const 的指针也许不是最好的主意,但只要您不修改其内容,就可以了。

第二个构造也不是未定义的。字符串文字具有静态存储持续时间。如果您将指向第一个字符的指针返回给它,那么无论指针的生命周期和范围如何,它都是有效的(只要它被正确复制,例如它被传递给函数或从函数返回,这正是发生在你的代码)。

关于c - 这也是 Ansi C 中的未定义行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21060348/

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