1

我知道这个问题可能与其他一些问题重复,但我想在进行此更改之前确保我是正确的,所以无论如何我都会在这里问。在我维护的一个旧项目中,有这行代码:

TCHAR m_sLogPath[MAX_LOGPATH_LEN];

有一行代码在其中初始化和使用了数组,但过了一会儿,就会进行以下检查:

if(NULL== m_sLogPath || _tcsicmp(m_sLogPath, trace_path)!=0){//code here}

我猜这个 if 语句正在检查 m_sLogPath 是否为空,但是 NULL== m_sLogPath 是一个毫无意义的检查,因为将数组与 NULL 进行比较是没有意义的。我将不得不删除 NULL== m_sLogPath peice,我的问题是应该去那里检查数组是否为空?感谢所有的回答和帮助,

4

2 回答 2

8

你是对的,如果在相同的上下文中完成,那是一个毫无意义的检查。

如果将它作为参数传递给函数,则数组会衰减为指针,它并不是那么毫无意义。

应该去那里检查数组是否为空

好吧,数组永远不会为空。它将始终包含MAX_LOGPATH_LEN TCHARs。但是以下方法可以解决问题:

if( m_sLogPath[0] == _T('\0') || _tcsicmp(m_sLogPath, trace_path)!=0)
于 2012-04-04T11:03:17.747 回答
3

m_sLogPath数组始终包含MAX_LOGPATH_LEN字符。假设它MAX_LOGPATH_LEN是一个大于 0 的常数,那么数组永远不会是空的。

我猜你真正想要检查的是存储在这个数组中的 C 风格的字符串是否为空。如果是这种情况,那么最简单的方法是:

#include <tchar.h>
#include <windows.h>

const size_t MAX_LOGPATH_LEN = MAX_PATH;
TCHAR m_sLogPath[MAX_LOGPATH_LEN];

int main()
{
    if (m_sLogPath[0] == _T('\0'))
    {
        // m_sLogPath contains empty string.
    }
}
于 2012-04-04T11:06:55.233 回答