为什么这段代码在C中有效

#include  int main(){ char array[2]; array[0] = 'q'; array[1] = 'a'; printf("%s",array); return 0; } 

如果你问我这个代码应该不行。 printf打印数组[2]像字符串,但它不是一个字符串。 当我执行它时,它完美地工作。 你能解释一下原因吗?

当我执行它时,它完美地工作。

你刚刚(非)幸运:你的代码表现出未定义的行为 ,因为它让printf%s参数在非空终止的字符序列的末尾运行。

C中的字符串是char序列,它必须具有值为0的额外字符,称为空终止符。 这是一种使代码无需未定义行为的方法:

 char array[3]; array[0] = 'q'; array[1] = 'a'; array[2] = '\0'; 

在C中, String与字符数组相同。 C中没有String这样的东西。