排错与纠正 01

中英文 全角半角区分

半角:英文字符,占一个字节,宽度较窄 标准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期免息付款,没有告诉父母

大学时光,转瞬即逝;雪泥鸿爪,物是人非

近来颇感困顿迷茫,心下震动;往日种种,蹉跎岁月

也只有当下抓紧时间,学好技术

诸君共勉

相关推荐
小贺儿开发18 分钟前
《流光绘忆》Unity 沉浸式光影互动
科技·unity·ai·程序员·工具·互动·光影
深蓝AI7 小时前
一个版本号失守:Claude Code 2.1.313 扩展后门事件,开发者机器如何变成别人的 SSH 入口
安全·程序员
深蓝AI10 小时前
Ghostty 1.4 七个月打磨:ASCII 解析快 5.7 倍、终端能放动画,SSH 乱码终结
程序员·开源
Solara10 小时前
绿灯连亮 6 天、今天我真写了 4 KB:这盏灯从没看过我写的那一层
人工智能·程序员·ai编程
怕浪猫11 小时前
我有个朋友,工作八年,公司从 300 人减到 80 人
面试·程序员
2分钟速写快排1 天前
ggg! 潜行摸鱼被 Trae 爆改成 3D!
人工智能·程序员·数据可视化
深蓝AI1 天前
EMBRACE 攻击打穿五个 AI 编程工具的浏览器:本地开发机成了最大攻击面
人工智能·程序员
楠风测开1 天前
接口性能 + AI 压测分析
程序员
彭亚川Allen1 天前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员