为什么这段代码在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
这样的东西。