- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们尝试使用 %c
将会输出什么在printf
打印字符串时。例如-
char c[]="Albus";
printf("%c", c);
或
char c[2]="A";
printf("%c", c);
最佳答案
有一些关于 c 的事实你失踪了:
没有string
数据类型。字符串只是一个以 0
字节结尾的 char
序列。这里使用的是字符串文字——编译器将其转换为char
数组,并自动在末尾添加0
。
数组在传递给函数时会自动转换为指向其第一个元素的指针,因此这里的 printf()
会获取 char *
类型的参数>.
考虑到这一点,您的代码只是未定义的行为:您的格式字符串 (%c
) 告诉 printf()
需要一个 char
>,但它被赋予一个 char *
,这是一种完全不同的类型,并且通常具有不同的大小(例如,在典型的 i386 机器上为 4 个字节)。
实际中可能发生的情况是,printf()
将显示 char
数组地址的最低有效字节(解释为 ASCII 字符)。它看起来会是随机的。但它也可能只是崩溃或做其他任何事情,它是未定义的......
对于初学者,请始终编译您的 c启用所有编译器警告的代码。然后,您将收到有关大多数可能未定义或由于其他原因而危险的事情的警告。如果您不明白警告,请通过 Google 进行搜索。
如果你使用gcc
,方法是gcc -Wall -Wextra -pedantic
。
关于字符c[] ="Albus"; printf ("%c",c);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33062513/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我是一名优秀的程序员,十分优秀!