#include <stdio.h>
int main(){
char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);
return 0;
}
如果你问我这个代码不应该工作。printf 像字符串一样打印 array[2] 但它不是字符串。当我执行它时,它工作得很好。你能解释一下为什么吗?
#include <stdio.h>
int main(){
char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);
return 0;
}
如果你问我这个代码不应该工作。printf 像字符串一样打印 array[2] 但它不是字符串。当我执行它时,它工作得很好。你能解释一下为什么吗?
当我执行它时,它工作得很好。
您刚刚(不)走运:您的代码表现出未定义的行为,因为它让printf
'%s
参数在非空终止字符序列的末尾运行。
C 中的字符串是 的序列char
,它必须有一个带有值的额外字符0
,称为空终止符。这是一种使您的代码在没有未定义行为的情况下工作的方法:
char array[3];
array[0] = 'q';
array[1] = 'a';
array[2] = '\0';
在 C 中,String
与字符数组相同。String
C中没有这样的东西。