您能帮我理解为什么我得到此输出吗?
#include<stdio.h>
#include<string.h>
void main() {
char a[] = "Hello World";
char *p;
p=a;
printf("%d%d%d%d",sizeof(a),sizeof(p),strlen(a),strlen(p));
}
输出: 1281111 (我的操作系统是64位)
说如果上面的代码经过编译并显示1241111(输出), 在32位系统上运行。由于是64位,因此显示1281111。
在第一年,我看到了这个问题,当我去寻找输出时, 我得到1281111。
但是令人惊讶的是,以上代码的输出有两个选择:1)12121111和2)1221111。(大学问题)。
答案 0 :(得分:1)
如果将printf()
语句更改为以下内容,则更容易了解发生了什么:
printf("%d\n%d\n%d\n%d\n",sizeof(a),sizeof(p),strlen(a),strlen(p));
在我的系统上,这将导致输出:
12
8
11
11
换句话说:
\0
字符为一个。)4
的32位计算机)。char*
指针)时,a
和p
是等效的。 (因为p
指向a
。)字符串Hello World
的长度为11
(因为strlen()
不包含\0
字节在字符串的末尾)。希望这会有所帮助。