【发布时间】:2016-12-09 06:55:24
【问题描述】:
#include<stdio.h>
void main()
{
int i;
char str[4] = "f4dfkjfj";
char str2[3] = "987";
char str3[2] = {'j','j','\0'};
//printf("%c\n",str[1]);
//printf("%c\n",1[str]);
puts(str);
puts(str2);
puts(str3);
}
输出观察:
- 打印
str2打印来自str2和str的内容。 - 打印
str3打印str3、str2和str。
为什么在打印非 nul 结尾的字符串时会出现这种行为,该字符串与之前定义的字符串连接,直到 puts() 函数遇到 "\0" 字符(此函数打印直到遇到 nul )?
(注意:我故意用太长的初始化字符串来初始化它们)
【问题讨论】:
-
不应该编译器发出警告甚至错误声明为
char str2[3] = "987";吗? -
是的,它确实会发出警告,警告没有 nul 字符的初始化程序过长,但后来我故意这样做是为了学习..
-
关于
str2的情况,see this。