中英文 全角半角区分
半角:英文字符,占一个字节,宽度较窄 标准ASCII 码
全角:中文字符,占两个字节,显得更宽 中文GBK或Unicode 编码
C/C++等编程语言中,编译器严格区分中英文符号
乱码错误:C3872或invalid character
字符类型与字符串类型 单双引号及字符个数辨析
1、本质类型与内存占用的差异
单引号:C语言中,单引号引起的是字符常量。本质上是一个整数,即对应字符的ASCII码值。它只占1个字节。
双引号:C语言中没有原生的string类型。双引号引起的叫做字符串字面量,它本质上是一个字符数组。C语言规定,所有字符串最后都必须以一个隐藏的空字符\0结尾。
2、"A"和'A'在内存中完全不同:
'A'占用1个字节,内容:65
"A"占用2个字节,内容:65 0
3、赋值对象的区别
字符可以赋值给char变量;
字符串不能直接赋值给char变量,只能赋值给字符数组或字符指针。
4、单引号里不能放多个字符!
'AB'---有时候可能通过,称为"多字符常量",它的值由编译器决定,通常是把ASCII码拼起来。这种代码不可移植,属于绝对的编程恶习。
5、字符串的表面长度与实际内存占用
字符串所占用的内存是其表面长度加上一个\0
strlen("Hello") 计算表面长度,它数到\0就停止了,所以结果是5
sizeof("Hello") 计算占用内存,包含隐藏的\0,所以结果是6
一个字符类型的量,单引号内是否只能有一个字符?
单引号内有且仅有一个字符,这句话在逻辑上绝对正确。
但理解上存在一个可能产生歧义的小细节:即转义字符表面上不止一个字符,实际上作为一个整体算作一个字符。
冷知识: 在C++中(VS默认使用C++),'A'的类型就是char,确实只占1个字节; 但在纯C语言中,有一个奇葩的规定------------单引号引起的字符常量,其类型其实是int,通常占4个字节。只有当它赋值给char变量时,它才会被截断并塞进1个字节的变量里。
能否说任意一个能够写在单引号内作为字符类型的量,都可以在ASCII码表中找到一个相同字符与之一一对应?
这个表述基本准确,但还需要加几个限定条件:
1、必须是"单字节"字符
标准ASCII码表只有128个字符,扩展版256个,只能容纳英文字母、数字、标点和控制符等。
如果写一个'中',则不合法。因为一个汉字在UTF-8或GBK编码下通常占2~3个字符,而一般的char类型只有1个字节,根本装不下,编译器会报错或将其截断。
2、转义字符的"视觉欺骗",前文已有论述
3、必须符合语法规定(排除多字符常量)
前文亦有论述,类似'AB'这种写法,属于"多字符常量",它不属于标准的单字符。在C语言中它的值是由编译器自己决定的(通常是把ASCII码拼接起来),它不属于一一对应某个特定的ASCII字符,这属于编程恶习。
综上所述,在C/C++中,任意一个合法的、单字节的字符常量(包括可见字符和转义字符),都必然在ASCII码表中存在唯一对应的整数值。
VS2026配置新项目时,为什么推荐勾选将解决方案和项目放在同一目录中?何为解决方案?
项目Project:包含具体的代码、资源和编译设置,最终生成一个独立程序(如.exe)
解决方案Solution:是一个顶层容器(.sln文件),用于管理一个或多个相关联的项目
勾选:扁平化管理。所有文件直接在\项目名\下,路径清爽,找代码、备份极快。
不勾选 :会产生"俄罗斯套娃"式的嵌套路径\项目名\项目名。对于单文件的新手练习来说,完全没必要,只会增加找文件的麻烦。
未来开发大型企业级多项目应用时,才需要取消勾选,通过物理隔离来规范工程结构。
VS中如何设置行号?如何调节字体?
顶部菜单栏---工具---选项---文本编辑器---C/C++---常规---显示---行号
顶部菜单栏---工具---选项---环境---字体和颜色
推荐等宽字体Consolas:明显区分数字0与字母o、数字1与字母l
Q: 输出打印不带\0的字符串时,为何printf中已经设置换行,而该字符串由于无法准确停止,向后读取"烫烫烫"时会夹带下一行打印的字符串内容,并与次行打印内容相同?
A: 个人对上例的理解:无\0的字符串在内存空间中不停向后读取,以求找到一个停下来的契机。而后续打印的其他完整字符串与前者在内存空间中排序相近,因此它在读取完中间的"烫烫烫"后,会继续输出下一个数组中的字符串内容,直到遇到该字符串中的\0才停止打印。
核心:内存越界读取 & 内存分布相邻
"烫"的来源:在VS的Debug模式下,系统会把未初始化的栈内存填充为0xCC。 0xCC在GBK编码下恰好就是"烫"字,所以它打印出了一连串的"烫"。
代码里的\n并不是让printf停止读取字符串的信号,它只是一个单纯的"输出格式控制符"。整个越界读取的过程完成后,才会执行\n进行换行。这导致下一次printf打印新内容时,会看到两者的内容有重叠。

C语言代码的编译与链接大致流程
编辑器文本文件 .c源文件 --- VS cl.exe编译 --- 机器指令 .obj目标文件 + 标准库文件.lib --- link 链接 --- 二进制可执行文件 .exe
中文乱码问题(部分)


底层原因:编码不匹配
VS默认将代码保存为UTF-8编码,而 Windows的cmd控制台默认使用GBK编码(代码页 936)
拿GBK的字典去硬翻UTF-8的汉字,必然乱码
解决方案之一:
在main函数开头强行将控制台编码切换为 UTF-8:
#include <stdlib.h>
强制切换控制台代码页为UTF-8,>nul用于隐藏切换成功的提示信息
system("chcp 65001 > nul");
结语
本文作于2026/10/29下午,专科学校大三实习前夕
前几日报名参加比特就业课,费用一万有余,分24期免息付款,没有告诉父母
大学时光,转瞬即逝;雪泥鸿爪,物是人非
近来颇感困顿迷茫,心下震动;往日种种,蹉跎岁月
也只有当下抓紧时间,学好技术
诸君共勉