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