Laz*_*zer 2 c arrays string char
#include<stdio.h>
int main()
{
char a[5]="hello";
puts(a); //prints hello
}
Run Code Online (Sandbox Code Playgroud)
为什么代码编译正确?我们需要六个地方存储"hello",对吗?
C编译器允许您显式请求无null终止符.
char a[] = "Hello"; /* adds a terminator implicitly */
char a[6] = "Hello"; /* adds a terminator implicitly */
char a[5] = "Hello"; /* skips it */
Run Code Online (Sandbox Code Playgroud)
任何小于5的值都会导致错误.
至于为什么 - 一种可能性是你的字符串是固定大小的,或者被用作字节值的缓冲区.在这些情况下,您不需要空终止符.
最佳实践是使用,char a[]因此编译器可以自动将其设置为正确的值(包括终结符).