2

如果变量未初始化,假设 if 语句将始终有效是否安全?假设是肯定的,但有人告诉我,变量中的随机垃圾位并不总是意味着检查是否为 null 将起作用。

Void afunction () {
    char* someStr;
    if (someStr) 
    {
        // do something
    }
}
4

4 回答 4

9

如果变量未初始化,假设 if 语句将始终有效是否安全?

不会。读取未初始化的存储会调用未定义的行为。您不能对此代码做出安全的假设。

不要这样做!

于 2013-02-05T22:31:00.047 回答
5

这绝对不能保证总是有效。你必须自己初始化它。

char* someStr = NULL;

或其他一些价值。

于 2013-02-05T22:31:09.743 回答
2

未初始化的变量是不确定的。在赋值之前读取它们会导致未定义的行为。

检查指针是否是很容易的NULL

if (someStr) {
   // Don't use it (or do for some weird reason)
}

为了安全起见并确保指针是您想要的值,我会在初始化时为其分配一个值。

char* someStr = NULL;

您还可以将指针设为静态以避免未定义的行为。

static char* someStr;
于 2013-02-05T22:34:12.320 回答
1

的值someStr未定义。一般来说,它将被设置为堆栈中的某个旧值。因此,它很可能是 NULL(即 0)。

于 2013-02-05T22:31:29.843 回答