gpt4 book ai didi

c - 在 C 中初始化字符串的正确方法

转载 作者:太空狗 更新时间:2023-10-29 16:39:40 26 4
gpt4 key购买 nike

我见过人们的代码是这样的:

char *str = NULL;

我也看到了,

char *str;

我想知道,初始化字符串的正确方法是什么?什么时候应该初始化一个带 NULL 和不带 NULL 的字符串?

最佳答案

你应该在使用它之前设置它。这是您必须 为避免未定义行为而必须遵循的唯一规则。无论您是在创建时初始化它还是在使用它之前分配给它都无关紧要。

就个人而言,我宁愿自己永远不要将变量设置为未知值,所以我通常会做第一个,除非它设置得非常接近(在几行之内)。

事实上,在 C99 中,您不必再在 block 的顶部声明局部变量,我通常会推迟创建它直到需要它,此时它也可以被初始化。

请注意,变量在某些情况下会被赋予默认值(例如,如果它们是静态存储持续时间,例如在文件级别声明,在任何函数之外)。

局部变量没有这种保证。因此,如果您上面的第二个声明 (char *str;) 在一个函数内,它可能有垃圾并且尝试使用它会调用上述的、可怕的、未定义的行为。

C99标准6.7.8/10的相关部分:

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static storage duration is not initialized explicitly, then:

  • if it has pointer type, it is initialized to a null pointer;
  • if it has arithmetic type, it is initialized to (positive or unsigned) zero;
  • if it is an aggregate, every member is initialized (recursively) according to these rules;
  • if it is a union, the first named member is initialized (recursively) according to these rules.

关于c - 在 C 中初始化字符串的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083239/

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