gpt4 book ai didi

c - 打印三个内容相同的字符串会得到不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:35 24 4
gpt4 key购买 nike

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com