标题可能有点用词不当...只是因为我不确定我的 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,效果很好。我似乎无法检查它是 null 还是空的。
我意识到这是两个不同的东西(null 和 empty)。我想知道这里有哪一个数据,以及如何检查它是否为 null/空。
最佳答案
使用 getenv,您必须处理这两种情况! (耶!)如果未设置环境变量,则该函数返回 NULL。如果它被设置,那么你会得到一个指向它所设置的值的指针,它可能是空的。所以:
const char* data = getenv("QUERY_STRING");
if (data != NULL && data[0] != '\0') {
// Variable is set to value with length > 0
// ...
}
显然,您需要在尝试确定它的长度或读取它指向的任何字符之前检查它是否为 NULL——这就是为什么上面的 if< 中的两个条件
按原样排序。
关于c++ - 如何检查指针是否指向 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340635/