这是测试返回字符串是否为空的唯一方法。每个都在对方的体系结构中失败。问题是为什么?为什么!=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/