
你好为什么变成了烫烫烫
LeonardoFox“你好”为什么变成了”烫烫烫”
代码开路
1 | #include <stdio.h> |
此处输出是会变成 我女朋友的名字是烫烫烫烫烫烫烫烫烫烫烫烫F??
原因:<!>处的 %d 使用不当
应该改为使用为 %s 字符串类型
下面是常用占位符和数据类型的解释
第一部分:常用数据类型(内存中的样子)
这部分决定了你定义的变量能存多大的数,以及它在内存里占多大空间。
| 分类 | 关键字 | 字节 (Byte) | 取值范围简述 | 适用场景 |
|---|---|---|---|---|
| 整型 | int |
4 | -21亿 ~ 21亿 | 存整数(最常用) |
long long |
8 | 极大的整数 | 存手机号、QQ号、超大计算 | |
| 浮点型 | float |
4 | 6~7位有效数字 | 存小数(精度要求不高) |
double |
8 | 15~16位有效数字 | 存科学计算、高精度小数 | |
| 字符型 | char |
1 | -128 ~ 127 | 存单个字母、符号、数字 |
| 字符串 | char[] |
取决于定义 | 连续的多个字符 | 存名字、句子、路径 |
第二部分:占位符与类型匹配(代码里的样子)
这部分是 printf 和 scanf 的核心,类型必须一一对应,否则就会出现之前的“烫烫烫”。
| 数据类型 | 占位符 | 示例代码 | 备注 |
|---|---|---|---|
int |
%d |
printf("%d", 100); |
d 代表 decimal(十进制) |
long long |
%lld |
scanf("%lld", &bigNum); |
l 代表 long,ll 就是很长 |
float |
%f |
printf("%.2f", 3.14); |
默认 6 位小数,.2 控制位数 |
double |
%lf |
scanf("%lf", &d); |
scanf 读 double 必须用 %lf |
char |
%c |
printf("%c", 'A'); |
c 代表 character |
char[] |
%s |
scanf("%s", arr); |
s 代表 string,不用加 & |
| 地址 | %p |
printf("%p", &a); |
p 代表 pointer(指针/地址) |
你可以把变量想象成抽屉,占位符想象成开锁的钥匙。
- 数据类型:定义抽屉的大小。如果定义
char a[8],说明这个抽屉很小,且里面打算放字符, - 结果:输入的字符太大了(指3个汉字) 抽屉就会爆炸!
- 占位符:决定你怎么拿东西。你用了
%d,相当于拿了一把“重型卡车”的钥匙去开“首饰盒”。 - 结果:钥匙对不上(类型不匹配),拿出来的东西就全是乱码。
常用技巧总结:
整数全家桶:
%d(小),%ld(中),%lld(大)。小数全家桶:
%f(float),%lf(double)。文本全家桶:
%c(单字),%s(一串)。Ps 内存大小的计算公式(基础)
其实字符串的内存计算,你只需要记住一个“排队领座位”的原则:
字符串内存占用计算公式
你可以把字符串占用的大小拆解为三部分相加:
总字节数 = (中文个数 × 2) + (英文/符号/数字个数 × 1) + 1 (结束标记)
拆开详细看:
- 中文(2字节/个):在 VS 默认环境下,一个汉字占两个位置。
- 英文/数字/符号(1字节/个):比如
a,1,!都只占一个位置。 - 结束标记
\0(必须加 1):这是 C 语言字符串的“句号”。虽然你看不到它,但它必须占用一个字节的空间,否则程序不知道字符串到哪里结束(就会出现你之前的“烫烫烫”)。
举两个例子(对照你的需求):
例子 A:名字是“三张”
- 计算:2个中文 × 2 = 4 字节
- 加上结束标记:4 + 1 = 5 字节
- 定义方式:
char name[5] = "三张";
例子 B:名字是“Fox66”
喜欢这篇文章的人也看了
评论
匿名评论隐私政策



