簡體   English   中英

如何檢查指針是否指向NULL?

[英]How do I check if a pointer points to 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數據,這很好用。 我似乎無法檢查它是否為空或空。

我意識到這些是兩個不同的東西(空和空)。 我想知道這里有哪一個數據,以及如何檢查它是否為空/空。

使用getenv,你必須處理這兩種情況! (是的!)如果未設置環境變量,則該函數返回NULL。 如果設置了,那么你得到一個指向它設置的值的指針,它可能是空的。 所以:

const char* data = getenv("QUERY_STRING");
if (data != NULL && data[0] != '\0') {
    // Variable is set to value with length > 0
    // ...
}

很顯然,你需要檢查它是否是NULL它指向試圖確定它的長度或讀取任何字符之前 -這就是為什么在上述兩個條件if是有序的,他們是這樣的。

一般來說,你會檢查這樣的事情。 第一部分檢查指針是否為null,第二部分通過檢查每個字符串末尾的空終止符的第一個字符來檢查空字符串。

if (data == NULL || data[0] == 0)

您的問題看起來像getenvstrlen之間的某些特定交互,這是非標准的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM