[英]Is the following C code safe?
#include<cstdio>
#include<stdlib.h>
int main()
{
char* ptr=NULL;
printf("%s",ptr);
return 0;
}
它打印(null)作为输出。 以上是示例代码。 在实际代码中,我得到char *作为函数的返回,我希望打印字符串进行日志记录。 但是,NULL也是该函数的有效返回值,所以我想知道在打印字符串之前是否需要进行空检查?
char* ptr=someFuncion();
// do i need the following if statement?
if(ptr!=NULL)
{
printf("%s",ptr);
}
我只想确保输出是相同的,即如果ptr = NULL,那么在所有平台和编译器上输出应该是(null),并且上面的代码(没有if语句)不会在任何C标准兼容平台上崩溃。
总之,上面的代码(没有if语句)标准是否兼容?
谢谢你的帮助和耐心:)
问候
拉利
总之,上面的代码(没有if语句)标准是否兼容?
ISO / IEC 9899:1999(C标准文档)没有声明如果ptr
为NULL会发生什么,所以行为是未定义的 。 您使用的库非常友好,可以为您提供一些有用的输出(“(null)”)而不是崩溃。
包括对NULL的显式检查。
你的意思是这样的吗?
char* result = foo (); printf ("result is %s\n", (result ? result : "NULL"));
如果有疑问,你不应该依赖于实现细节并执行额外的(ptr != NULL)
- 这也是很好的编码实践。
根据我的经验,通常你会在没有if语句的情况下处于清晰状态,尽管我倾向于避免做出你所说的习惯......这已经很长一段时间了,但IIRC是我曾经使用过的Sun编译器如果你将一个NULL char *传递给printf()会导致部分或全部崩溃,所以包含检查更简单,更安全......我打算在使用宏形式的注释中,但我发现自从我开始打字以来,我在30秒内被其他3人殴打过它:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.