这可能是一个比我预期的更深层次的问题,但你能看到一个字符指针是否未分配?例如,从我运行此代码时可以看出,未分配的字符串不是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
。这是有道理的,因为字符串不能有空字符的内存。那么,有没有办法看看字符串是否未分配?或者我问错了问题?
答案 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)。