我如何检查分配后的char指针是否为空

时间:2018-11-20 08:56:24

标签: c pointers char malloc

我已在这段代码中为char指针分配了内存,我想检查是否指向任何内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char *p  = (char*) malloc(sizeof(char)*10);
    if(*p == 0)
       printf("The pointer points nothing !\n");

}

然后我检查了一下是否没有指向任何东西。我也打印指针的长度,尽管什么也没打印,但它打印的是“ 3”。这是什么原因,我该如何检查它什么也没有指向?

1 个答案:

答案 0 :(得分:3)

您需要修改检查以检查返回的指针,而不是内容。像

if( p == NULL) {
    fprintf(stderr, "The pointer points nothing !\n");
    return 1;
 }

应该做。引用有关返回值的标准:

  

malloc函数返回空指针或指向已分配空间的指针。

如果发生故障,则返回空指针,否则返回的指针应不等于空指针。

那是

  • 指向的内存的初始内容不确定,请勿尝试对其进行验证。引用标准

      

    malloc函数为size指定大小的对象分配空间。   其值不确定。

    对于您关于指针的“检查长度” 的其他问题,这毫无意义。除非您已在其中存储(写入)一些值-否则,尝试测量初始内容是没有意义的,因为它不确定。您最终可能会遇到undefined behavior

  • malloc()和family对返回的指针的强制转换是多余的。 It can be totally avoided in C.

  • sizeof(char)在C中保证为1。因此,再次不需要将sizeof(char)用作乘数,本身是