c - 测试 NULL 与字符串指针 x86 与 x64 的长度?

标签 c windows 64-bit

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

相关文章:

c - 优化循环遍历像素的代码

c - 在 C 中,将指向结构的指针值发送到函数时返回 float 会更改结构的值

xml - 为 SAML 签名和加密创建 x509.v3 自签名证书,Windows 8 R2

我可以使用 2 种语言制作 1 个程序吗?

python - 如何使用 C 文件返回一个值,然后使用 os.system 在 python 中获取它?

c - 通过引用将 char** 传递给函数

windows - 一个简单的 bat 文件中的两个输入变量

windows - 批处理脚本 : to remove a specific/targeted words that include special characters from multiple filenames

python - 在 Windows 7 x64 上使用 py2exe 编译问题

ruby-on-rails - 在 64 位 RedHat Linux 上从源代码编译 Ruby 的最佳方法是什么