以下C代码是否安全?

gha*_*der 11 c

#include<cstdio>
#include<stdlib.h>

int main()
{
    char* ptr=NULL;
    printf("%s",ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它打印(null)作为输出.以上是示例代码.在实际代码中,我得到char*作为函数的返回,我希望打印字符串进行日志记录.但是,NULL也是该函数的有效返回值,所以我想知道在打印字符串之前是否需要进行空检查?

char* ptr=someFuncion();
// do i need the following if statement?
if(ptr!=NULL)
{
  printf("%s",ptr);
}
Run Code Online (Sandbox Code Playgroud)

我只想确保输出是相同的,即如果ptr = NULL,那么在所有平台和编译器上输出应该是(null),并且上面的代码(没有if语句)不会在任何C标准兼容平台上崩溃.

总之,上面的代码(没有if语句)标准是否兼容?

谢谢你的帮助和耐心:)

问候

拉利

Dev*_*lar 21

总之,上面的代码(没有if语句)标准是否兼容?

No. ISO/IEC 9899:1999(C标准文档)没有声明如果ptr为NULL 会发生什么,所以行为是未定义的.您使用的库非常友好,可以为您提供一些有用的输出("(null)")而不是崩溃.

包括对NULL的显式检查.


Pau*_*ham 7

你的意思是这样的吗?

  char* result = foo ();
  printf ("result is %s\n", (result ? result : "NULL"));


Rob*_*ert 5

如果有疑问,您不应该依赖实现细节并执行额外的操作(ptr != NULL)- 这也是良好的编码实践.