#include<cstdio>
#include<stdlib.h>
int main()
{
char* ptr=NULL;
printf("%s",ptr);
return 0;
}它输出(null)作为输出。上面是一个示例代码。在实际代码中,我将char*作为函数的返回值,并希望打印用于日志记录的字符串。但是,NULL也是该函数的有效返回值,所以我想知道在打印字符串之前是否需要进行null检查?
char* ptr=someFuncion();
// do i need the following if statement?
if(ptr!=NULL)
{
printf("%s",ptr);
}我只想确保输出是相同的,即如果ptr=NULL,那么在所有平台和编译器上的输出应该是(null),并且上面的代码(没有if语句)在任何C标准兼容的平台上都不会崩溃。
简而言之,上面的代码(没有if语句)标准兼容吗?
感谢您的帮助和耐心:)
问候
拉利
发布于 2010-03-30 21:36:28
简而言之,上面的代码(没有if语句)标准兼容吗?
不是的。ISO/IEC9899:1999(C标准文档)没有说明如果ptr为NULL会发生什么,所以行为是未定义的。您使用的库只是足够友好,可以为您提供一些有用的输出("(null)"),而不是崩溃。
包括对NULL的显式检查。
发布于 2010-03-30 21:35:11
如果有疑问,您不应该依赖于实现细节并执行额外的(ptr != NULL) -这也是很好的编码实践。
发布于 2010-03-30 21:37:57
在我的经验中,通常你不需要if-语句就可以做到这一点,尽管出于习惯,我倾向于避免做你所说明的事情……已经有很长一段时间了,但是IIRC我曾经使用过的Sun编译器在将NULL char*传递到printf()中时会导致某些或全部时间崩溃,所以将检查包含进来会更容易、更安全……我正要加入使用宏表单的注意事项,但我发现自从我开始键入以下内容以来,在30秒内就被其他3个人抢先一步:)
https://stackoverflow.com/questions/2545553
复制相似问题