【发布时间】:2012-01-09 10:10:49
【问题描述】:
我想知道str == NULL和str[0] == '\0'的区别:
int convert_to_float(char *str, double *num)
{
if ((str == NULL) || (str[0] == '\0'))
return(-1);
*num = strtod(str, (char **)NULL);
return(0);
}
我在 Linux 上使用 gcc。
【问题讨论】:
-
@julio.alegria 我不会说这个检查与你在 Java 中的检查有太大的不同。在 Java 中我会写
if (str == null || str.isEmpty()),它与 C 中的行很相似,只是长度测试的方式不同。 -
请注意,NULL 和 '\0' 是完全相同的东西。 两者之间的唯一区别是您是否取消引用指针。
(NULL == '\0')返回真。 -
...警告:“在几乎(但不是)所有系统上,”NULL 被定义为 0。C 标准不要求这是真的,并且存在深奥的系统其中 NULL != 0. NULL = (void*) 0 /* 或其他数字,但绝对是 (void*) */; 0 = (int)0; 0.0 = (浮动)0; '\0' = (char)0.
-
第一个和第三个答案完全不正确。这是个很大的差异。一种是将指针与 NULL 指针进行比较(无处指向),另一种是由 nul 字符分隔的合法 C 字符串,其中 str 是有效指针。
-
@MichaelAnderson:
NULL可以是0或(void*)0;它的大小可以是指针的大小,也可以是int的大小。sizeof('\0')不能为 0;它应该与sizeof (int)相同,因为C 字符常量的类型为int。