我已在这段代码中为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”。这是什么原因,我该如何检查它什么也没有指向?
答案 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)
用作乘数,本身是 。