标题可能有点用词不当......只是因为我不确定我的char指针是否指向NULL,或者它只是指向大小为0的char数组。
所以我有
char* data = getenv("QUERY_STRING");
我想检查数据是否为空(或者长度是否为<1)。我试过了:
if(strlen(data)<1)
但是我收到了错误:
==24945== Invalid read of size 1
==24945== at 0x8048BF9: main (in /cpp.cgi)
==24945== Address 0x1 is not stack'd, malloc'd or (recently) free'd
我也试过
if(data == NULL)
但结果相同。
这里发生了什么?我已经尝试过cout数据,这很好用。我似乎无法检查它是否为空或空。
我意识到这些是两个不同的东西(空和空)。我想知道这里有哪一个数据,以及如何检查它是否为空/空。
答案 0 :(得分:21)
使用getenv,你必须处理这两种情况! (是的!)如果未设置环境变量,则该函数返回NULL。如果设置了,那么你得到一个指向它设置的值的指针,它可能是空的。所以:
const char* data = getenv("QUERY_STRING");
if (data != NULL && data[0] != '\0') {
// Variable is set to value with length > 0
// ...
}
显然,在试图确定其长度或读取它所指向的任何字符之前,你需要检查它是否为是 - 这就是上述if
中的两个条件的原因按照他们的方式订购。
答案 1 :(得分:4)
一般来说,你会检查这样的事情。第一部分检查指针是否为null,第二部分通过检查每个字符串末尾的空终止符的第一个字符来检查空字符串。
if (data == NULL || data[0] == 0)
您的问题看起来像getenv
和strlen
之间的某些特定互动而非标准。