1
#include <stdio.h>

int main(){

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

return 0;
}

如果你问我这个代码不应该工作。printf 像字符串一样打印 array[2] 但它不是字符串。当我执行它时,它工作得很好。你能解释一下为什么吗?

4

2 回答 2

5

当我执行它时,它工作得很好。

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

C 中的字符串是 的序列char,它必须有一个带有值的额外字符0,称为空终止符。这是一种使您的代码在没有未定义行为的情况下工作的方法:

char array[3];
array[0] = 'q';
array[1] = 'a';
array[2] = '\0';
于 2012-12-16T01:37:15.850 回答
3

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

于 2012-12-16T01:34:06.807 回答