pol*_*nut 5 c printf format-specifiers
在C编程练习中,我正在做这样的事情(只是简化):
printf( "%s", 0);
Run Code Online (Sandbox Code Playgroud)
输出是
(null)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我假设printf将零解释为a char *,那么NULL?我怎么能用这样的东西复制这个结果
char string[] = NULL; //compiler-error
printf( "%s", string);
Run Code Online (Sandbox Code Playgroud)
?
首先,你的
printf("%s", 0);
Run Code Online (Sandbox Code Playgroud)
导致未定义的行为(UB).%sin printf需要char *指针作为参数.你在路过0,这是一个int.仅这一点已经破坏了你的代码,就像
printf("%s", 42);
Run Code Online (Sandbox Code Playgroud)
将.对于具体的UB的事实,0是一个零没有任何区别.
其次,如果你真的想尝试将null-ponter传递给%s格式说明符,你必须做类似的事情
printf("%s", (char *) 0);
Run Code Online (Sandbox Code Playgroud)
当然,这也会导致未定义的行为,因为%s需要指向有效字符串的指针作为参数,并且(char *) 0不是有效的字符串指针.但有些实现更喜欢优雅地处理这种情况并且只是打印(null).
在你的特殊情况下,你很幸运:printf("%s", 0)"工作"的方式printf("%s", (char *) 0)和你的实现一样,你的实现通过输出节省了一天(null).
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |