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

Lea*_*ath 1 c

#include <stdio.h>

int main(){

char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 5

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

你刚刚得到(联合国)幸运:你的代码表现出不确定的行为,因为它让printf%s参数流失的字符序列,是不是空的阶段结束.

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

char array[3];
array[0] = 'q';
array[1] = 'a';
array[2] = '\0';
Run Code Online (Sandbox Code Playgroud)

  • 实际上,他不走运.代码没有达到他的预期,并隐藏了一个缺陷. (3认同)