c++ - 如何检查指针是否指向 NULL?

标签 c++ c null

标题可能有点用词不当...只是因为我不确定我的 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/

相关文章:

c++ - 将字符数组初始化为C++中的NULL

c++ - 如何将矩阵参数发送到 C++ 中的 main 函数

c++ - 不理解-c -o的Unix C++编译器

c++ - 从字符串的开头或结尾修剪匹配字符 C++

c - EOF 和未使用的二维数组的空闲部分

c - C 中的文件 I/O、fgets() 和 strtok() 函数

c - 在 C 函数中声明全局变量(数组)

r - R 'data' 的问题必须是向量类型,是 'NULL'

unit-testing - 在 Moq 中,是否有一种简单的方法可以使 Setup() 返回 null,而不管提供的所有参数如何?

c++ - 如何将 char 转换为 QString?