【发布时间】:2014-10-01 11:03:01
【问题描述】:
#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 数组分配 2 个字节而不是 1 个字节。您总是必须为 '\0' 字符串终止符保留 1 个额外的字符
-
记住字符串应该以
'\0'结尾。 -
您的阵列中没有足够的空间用于
\0 -
更改为
char firstName[] = "1";。所有人都一样。 -
谢谢大家,我明白了。:)