这是测试返回字符串是否为空的唯一方法。每个都在对方的体系结构中失败。问题是为什么?为什么!=NULL在x86上失败而_tcslen(*sDateOut)>0在x64上失败?

BOOL FormatDate(TCHAR *sIn, TCHAR **sOut) {
free(*sOut);*sOut=NULL; // Clear

...
if (condition1)
    *sOut = calloc(length,sizeof(TCHAR);
...

#ifdef WIN64
    return (*sOut != NULL);
#else
    return (_tcslen(*sOut)>0);
#endif
}

最佳答案

如果要检查空字符串,应将第一个字符与'\0'而不是NULL进行比较。

这样做的原因是因为NULL应该表示一个空指针-它的实际值实际上可能不是零。



现在回到示例,如果您要测试TCHAR **sOut是否是指向空字符串的有效指针,则此测试应该有效:

if (sOut && *sOut && (*sOut)[0] != _T('\0')) {
    // non-empty
} else {
    // empty or invalid pointer
}

关于c - 测试NULL与字符串指针的长度x86与x64?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10295978/

10-10 08:08