检查字符串是否未分配

时间:2013-12-02 03:32:13

标签: c string pointers allocation

这可能是一个比我预期的更深层次的问题,但你能看到一个字符指针是否未分配?例如,从我运行此代码时可以看出,未分配的字符串不是NULL

char *ptr; /* Unallocated char pointer */
if (ptr == NULL) {
        ptr = malloc(10); /* Not casted cause it doesn't matter */
        printf("ptr is allocated\n");
        return(0);
}
printf("ptr is unallocated\n");
return(0);

当我运行代码时,我收到了消息ptr is unallocated。这是有道理的,因为字符串不能有空字符的内存。那么,有没有办法看看字符串是否未分配?或者我问错了问题?

3 个答案:

答案 0 :(得分:4)

不,这是不可能的。在您的情况下,ptr 未初始化,这意味着它可能包含任何值,直到您第一次为其分配内容为止。它可能是NULL,也可能不是。

答案 1 :(得分:2)

那是因为你定义了ptr但没有初始化它。试试这个:

char *ptr = NULL;

一般来说,初始化指向空指针的指针是一种很好的编码风格。如果你想测试它是否被初始化为某个有效的字符串,这是至关重要的。

答案 2 :(得分:2)

如果没有提供初始值,则无法执行此操作,因为未初始化的自动变量将具有不确定值。它们必须初始化;否则无法确定自动变量的初始值。事实上,使用未初始化的变量是undefined behavior

C99标准草案在6.7.8 初始化段落 10 中说:

  

如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。 [...]

和附件J.2 未定义的行为 1 说:

  

在以下情况下,行为未定义:

并包含以下项目符号:

  

使用具有自动存储持续时间的对象的值   不确定(6.2.4,6.7.8,6.8)。