考虑一下案例:
char s1[] = "abc";
s1[3] = 'x';
printf("%s", s1);
Run Code Online (Sandbox Code Playgroud)
据我所知,printf打印字符直到找到空字符然后停止.
当我覆盖空字符时'x',为什么要正确printf打印s1数组?它是如何找到空字符的?
您的printf调用调用未定义的行为,因为s1没有零(也称为空字节)终止符.
s1是一个包含4个字符的数组,并且写入空字节不是问题.后
s1[3] = 'x';
Run Code Online (Sandbox Code Playgroud)
s1 会变成:
[a][b][c][x]
Run Code Online (Sandbox Code Playgroud)
但是你不能把它打印成字符串.根据定义,C中的字符串是以空字节终止的字节序列.它恰好在这次工作,但你永远不应该依赖它.