将字符串存储在C中的char数组中

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",对吗?

gre*_*reg 9

C编译器将允许您运行数组的末尾,它不会检查那种类型.


rjh*_*rjh 8

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[]因此编译器可以自动将其设置为正确的值(包括终结符).