覆盖C数组中的空字符

Hig*_*ggs 0 c arrays

考虑一下案例:

char s1[] = "abc";
s1[3] = 'x';
printf("%s", s1);
Run Code Online (Sandbox Code Playgroud)

据我所知,printf打印字符直到找到空字符然后停止.

当我覆盖空字符时'x',为什么要正确printf打印s1数组?它是如何找到空字符的?

P.P*_*.P. 5

您的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中的字符串是以空字节终止的字节序列.它恰好在这次工作,但你永远不应该依赖它.