c - C字符串取消引用然后重新引用行为奇怪?
问题描述
我有以下代码:
#include <stdio.h>
int main(){
char *p = "abc";
char c = *p;
printf(&c);
return 0;
}
跑步,我明白了
[OP@localhost test]$ gcc ptr.c
[OP@localhost test]$ ./a.out
a%QV[OP@localhost test]$
我期待它只打印“abc”。为什么会这样?
解决方案
char c = *p;
这对字符串中的第一个字母进行了硬拷贝,仅此"abc"
而已。
因此,您最终撒谎printf
并告诉它在单个字符的地址处c
,它将找到一个完整的有效格式字符串。
但它只会找到a
根本不是字符串的字符,因为任何地方都没有空终止符。所以任何事情都可能发生,包括程序崩溃或程序打印垃圾。
推荐阅读
- wordpress - 如何使用他们自己的rest api creds获取客户订单列表
- java - 黄瓜框架中的 ClassNotFoundException
- javascript - 如何将 cbor.tag 添加到 cose-js 中的 cose 签名中
- java - 任何人都有方法在 C# 中的字符串列表中找到字符串的最佳匹配?
- flutter - 如何选择最大的视图值?
- angular - Angular 表单验证器
- ios - 如何只允许单个 UIViewController 与 Xcode 倒置旋转?
- xcode - Xcode 13缺少产品文件夹,Finder菜单中的“显示构建文件夹”在哪里
- python - 在函数内部过滤熊猫数据框并返回过滤后的数据框
- azure - Databricks DBFS 文件浏览器未显示某些 DBFS 根位置