#include "stdio.h"
void main()
{
char firstName[1] = "1";
char middleName[1] = "1";
char lastName[1] = "1";
printf("%p\t%s\n",firstName,firstName);
printf("%p\t%s\n",middleName,middleName);
printf("%p\t%s\n",lastName,lastName);
}
我使用 gcc 4.8.2 编译这段代码,令我困惑的是为什么它打印:
> root@ubuntu:~# ./main
0x7fff7124273d 111
0x7fff7124273e 11
0x7fff7124273f 1
我认为它应该打印:
0x7fff7124273d 1
0x7fff7124273e 1
0x7fff7124273f 1
你能帮帮我吗?
最佳答案
char firstName[1] = "1";
这样初始化 char
数组是合法的,但它不是字符串,因为它不是空终止的。
printf
中的 "%s"
需要一个字符串,因此您正在做的是未定义的行为。
我的猜测是,编译器将变量放在一起,它们后面的字节恰好是0
,这可以解释发生了什么。但同样,这是未定义的行为,任何事情都有可能发生。
'1' '1' '1' 0
^ ^ ^
firstName | |
middleName |
lastName
关于c - 打印三个内容相同的字符串会得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26139866/