在以下代码中,行为是否未定义?
#include<stdio.h>
int main()
{
printf(7+"%c","sundaram");
}
Run Code Online (Sandbox Code Playgroud)
它印刷"aram".无法理解如何.
这是未定义的行为.
C中的字符串文字是指向预初始化内存块的指针.
巧合的是,你的两个字符串文字占用了相邻的内存块.
当您添加7到第一个文字的指针时,您最终指向下一个文字的中间.
您的程序数据按如下方式排列在内存中:
%c\0sundaram\0
| |
"%c" --^ |
7 + "%c" ------^
因此,最终调用printf两个指向同一字符串的指针,("adam", "sundadam")而不是格式说明符.
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |