我正在寻找一些c ++代码,并被if(ptr && *ptr)
搞糊涂了,在这种情况下它做了什么?
// Process the data here. We just break the data into separate pieces and
// display it for the sake of simplicity.
char * a_pszBreak = NULL;
char * a_pszDataItem = (char*)s_aucDataBuffer;
do
{
// The poll data is terminated by either a Carriage Return alone, or a
// Carriage Return/Line Feed pair.
a_pszBreak = strpbrk(a_pszDataItem, "\n\r");
if (a_pszBreak && *a_pszBreak)
{
*a_pszBreak = 0;
a_pszBreak++;
LogPollData((const char *)a_pszDataItem);
}
a_pszDataItem = a_pszBreak;
} while (a_pszBreak && *a_pszBreak);
答案 0 :(得分:6)
这意味着指针应指向某个东西,此外某些东西必须与0不同。
就像(a_pszBreak != nullptr && a_pszBrealk[0] != '\0')
答案 1 :(得分:0)
if (a_pszBreak && *a_pszBreak)
在C ++中,任何可以解释为0的内容都是false,而其他任何内容都被认为是出于语句的目的。
因此,这确保指针不是 NULL ,并且指针指向的第一个元素的内容也不是 null 或0。
由于短路,如果指针 NULL ,则不会检查第二部分。
所以用简单的英语,这个if
- 语句检查指针是不是nullptr
和,如果指针没有指向空字符串。
答案 2 :(得分:0)
在if (a_pszBreak && *a_pszBreak)
a_pszBreak
中用于检查a_pszBreak
是否指向有效内存区域,即a_pszBreak
不是NULL,*a_pszBreak
用于检查是否有内存由a_pszBreak
指出并不以NULL字符开头,即\0
。
简而言之,if (a_pszBreak && *a_pszBreak)
用于检查a_pszBreak
是否指向长度至少为1的字符串。