我是C语言的新手,我对打印数组感到困惑。
考虑以下简单代码:
char myName [5] = "tamir";
printf("My name is %s" , myName);
此输出为“ tamirH”,末尾有额外的H。
但是当我像这样char myName [6] = "tamir";
声明此数组时(现在该数组声明为6个字符,而“ tamir”由5个字符组成),我看不到多余的“ H”。
为什么会这样?这与C中的字符串终止符有关吗?还是我感到困惑?
答案 0 :(得分:1)
char myName [6] = "tamir";
将起作用。 为了避免人为错误,最好只声明char myName []并让编译器为您分配内存。(@ fassn建议)字符串文字将转换为静态char数组还添加了NULL。您还需要为NULL保留空间。 “ {mir}”是{'t', 'a', 'm', 'i', 'r', 0}
的{{3}}。 ISO/IEC 9899
的确切定义是syntactic sugar
在翻译阶段7中,一个或多个字符串文字产生的每个多字节字符序列将附加一个零值的字节或代码。