在C中初始化字符串的正确方法[英] Proper way to initialize a string in C

本文是小编为大家收集整理的关于在C中初始化字符串的正确方法的处理方法,想解了在C中初始化字符串的正确方法的问题怎么解决?在C中初始化字符串的正确方法问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我已经看到人们的代码为:

char *str = NULL;

我也看过这也是如此,

char *str;

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

推荐答案

您应该在使用之前将其设置.这是您 遵循的唯一规则,以避免不确定的行为.无论您是在创建时间初始化它还是在使用它之前分配给它.

个人演讲,我宁愿自己永远不要将变量设置为未知值,所以除非将其设置为近距离(在几行).

实际上,使用C99,您不必再在块的顶部声明当地人,我通常会推迟创建它直到需要,此时也可以初始化.

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

本地变量没有此保证.因此,如果您上面的第二个声明(char *str;)在功能内部,则它可能有垃圾,并尝试使用它会调用上述,可怕的,未定义的行为.

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

如果未明确初始化具有自动存储持续时间的对象,则其值是不确定的.如果未明确初始化具有静态存储持续时间的对象,则:

  • 如果它具有指针类型,则将其初始化为空指针;
  • 如果它具有算术类型,则将其初始化为(正或无符号)零;
  • 如果是汇总,则每个成员都是根据这些规则初始化(递归)的;
  • 如果是工会,则第一个命名成员根据这些规则进行初始化(递归).

其他推荐答案

我想知道,初始化字符串的正确方法是什么?

好吧,由于第二个摘要定义了 指向字符串的指针,所以我会说第一个. :)

一般而言,如果您想安全地播放它,最好初始化NULL所有指针;这样,很容易发现来自非初始化指针的问题,因为删除NULL指针会产生崩溃(实际上,就标准而言,它是未定义的行为,但在我看到的每台机器上,这都是一个崩溃).

但是,您不应将NULL指针与一个空字符串混淆:A NULL指针指向字符串意味着该指针什么都不指向(即它仅包含NUL字符).

char * str=NULL; /* NULL pointer to string - there's no string, just a pointer */
const char * str2 = ""; /* Pointer to a constant empty string */

char str3[] = "random text to reach 15 characters ;)"; /* String allocated (presumably on the stack) that contains some text */
*str3 = 0; /* str3 is emptied by putting a NUL in first position */

其他推荐答案

这是关于C变量的一个一般问题,而不仅仅是char ptrs.

在声明点初始化变量是最佳实践.即

char *str = NULL;

是一件好事.这样,您永远不会有未知值的变量.例如,如果以后在代码中,您会

if(str != NULL)
 doBar(str);

将会发生什么. Str处于未知(几乎肯定不是零)状态

请注意,静态变量将对您初始化为零/null.从问题中尚不清楚您是否正在询问当地人或静态

本文地址:https://www.itbaoku.cn/post/358988.html