C语言教程-1_0-常见问题汇总
ps:如果各位有遇到什么经典问题,欢迎在下面评论区@我,我会进行补充,谢谢~
常识篇
指的是编程应该有的常识~
字符分类
字符
在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息.
一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等.
字符集
不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样.
常见的字符集有:
GB2312
:中国国家标准的简体中文字符集.- ASCII:只包含了128个字符,主要为英文字符,阿拉伯数字和一些简单的控制字符.
- GBK字符集.在
GB2312
的基础上添加了部分字符,就形成了GBK
,完全兼容GB2312
. - Unicode字符集.国际标准字符集,可以容纳一百多万个字符.
ASCII字符集
C语言代码仅使用ASCII字符集构成(不考虑字符串).
分成可见字符
和不可见字符
,即一些控制字符和正常的英文字母,数字标点等可见字符.
其中空格' '
,制表符'\t'
,换行符'\n'
,回车符'\n'
,虽然为可见字符,但是是空白字符.
scanf()函数的%s
格式控制符在遇到空白字符时会停止.
软件篇
概念的分辨
IDE,编译器,编辑器并不是一个东西,不要混淆……
IDE
:集成开发环境(Integrated Development Environment),指一类集成的软件了,不仅仅可以进行代码的编辑
,一般还默认集成了某种(或多种)编译器
进行代码编译,还包括了调试
功能,甚至还会有代码仓库的管理,协同开发等高级功能,一般较为庞大,不过也有DevC++
这样的小型IDE。
常见的IDE有Visual Studio(VS)
,CLion
,Devc++
,Xcode
等等.他们有的是免费软件,但更多的是收费软件,具体见官方网址.
编译器
:即特定编程语言的编译工具,用于将源代码转为可执行代码,编译器几乎都是方便易用的,而且几乎都是免费的,安装即用。C/C++常用编译器有这三种种:GCC(Linux下,windows移植于Mingw工具链)
,Clang/LLVM
,MSVC(微软家的编译器,VS系列IDE默认的编译器)
。
编辑器
:就跟windows下的记事本一样的,敲代码用的,只不过像VScode
,Sublimetext3
,Notepad++
这样的高级编辑器十分强大,内置了许多高级的编辑功能,而且往往可以通过安装扩展来支持各种其他功能,往往能直接配置编译器进行代码的编译运行,所以甚至可以被改造为一款IDE
。
IDE使用
VS配置C/C++环境并创建项目
-
Win7系统,建议使用VS2017,Win10及Win11使用VS2022
-
安装的时候只在
工作负荷
选一个使用C++的桌面开发
即可,其他设置默认无需改动

- 创建项目注意一定是C++的,不要创建成C#项目

- 配置项目名和路径,最好找一个目录,专门存每次的代码,例如
D:\code\My_VS_Code\

- VS编写C代码不能使用scanf等函数,解决方法见:
- 一个项目只对应一个程序,一个程序只能有一个main()入口,哪怕你在一个项目里开了一堆源文件,也只能保留一个main(),因为这些源文件属于一个程序,不理解请移步
谷歌
搜索C语言多文件编程
- 待补充
安全检查的问题
另外,要注意的一点就是,VS默认是进行C++的开发,所以你会发现后缀都是.cpp,你改成.c也可以.还有很重要的一点就是,msvc(或者说VS这个IDE)默认是不允许使用scanf等函数的,因为他认为这些函数并不安全(具体原因以后解释,涉及到越界/栈溢出的问题),所以转而要求你使用scanf_s等函数来代替,报错如图:
报错是英文的:'scanf': This function or variable may be unsafe.
,所以英语也要多少会一点,不至于连报错提示都看不懂.
但是,我想说一句话:
学习过程中你可以犯错,让编译器去迁就你,但是如果你要去因为一个编译器的特殊性,你要去迁就编译器,那你这学的就一塌糊涂
我们学C,首先要学的就是标准C,至少也得是ANSI C,不过2023年了,我们至少要学习C99的标准.
scanf_s等函数是在C11才出现的,目前各大编译器的支持度不高,而且scanf_s和scanf的使用方法也并不相同,所以,一句话,不要使用scanf_s.
注:解决的是错误
,即使用scanf编译会报错,而警告scanf的返回值被忽略
不仅仅是VS会警告,其他软件也会警告,这是一个良好的警告,但我们无需关心—scanf的返回值确实有用,但是简单的程序用不到.
那么为了在VS中正常使用scanf等函数,我们有三种解决办法:
方法1:
关闭SDL检查
SDL(Security Development Lifecycle),安全开发生命周期检查,微软在VS2012新推出的东西,为了能更好的监管开发者的代码安全,如果勾选了这一项则将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译。
我们只需要把项目的SDL检查关闭即可,注意:每次新建项目都需要进行处理,包括下面的其他方法!
在菜单栏依次点击 项目->[你的项目名]属性,打开属性窗口,再次点击 配置属性->C/C+±>常规->SDL检查:

将SDL检查从是
修改为否
即可.
方法2:
为项目添加_CRT_SECURE_NO_DEPRECATE
预处理器定义
在菜单栏依次点击 项目->[你的项目名]属性,打开属性窗口,再次点击 配置属性->C/C+±>预处理器->预处理器定义:

在结尾先添加一个;
,然后输入_CRT_SECURE_NO_DEPRECATE
这一段,点击保存,这时,回到你的包含scanf的程序,再次运行,即可正常:

方法3:
在每个源文件开头添加一行代码:#define _CRT_SECURE_NO_WARNINGS 1
即可:

到此为止,VS2022的基本安装结束,以后遇到任何问题,请不要吝惜你的浏览器,先去网上找解决方案,一搜一大把.
程序无法写入的问题
有时候会发生编译时无法对程序写入的错误,这是因为上次调试的进程未正确关闭,程序句柄仍在占用,导致拒绝写入目标程序:
解决办法是在任务管理器中杀死对应程序。
例如上图中的程序名为 Project1.exe
,按下 ctrl+shift+esc
打开任务管理器,搜索 Project1
然后将对应进程结束即可:
编译器使用
gcc/g++编译
高级文本编辑器配置
VSCode配置C/C++的基本编译/运行调试环境
注:本节可以参考 C语言教程-2-环境搭建
。
首先,刚接触C的新手建议离开,一定程度上熟悉了编程的萌新可以逝逝.
VScode的项目设置由目录下的.vscode
中的json配置文件控制,我们需要配置3个文件:
c_cpp_properties.json
,tasks.json
,launch.json
c_cpp_properties.json
为C/C++语言相关的一些配置参数;
tasks.json
为任务配置文件,其中的每一个子项就是一个任务,我们可以将各种编译任务在这里配置.
launch.json
为启动配置文件,用于启动编译后的程序,进行运行或调试;
c_cpp_properties.json
使用这个配置文件对C/C++源文件进行编译选项和环境的配置.
1 | { |
tasks.json
这个文件配置了各种任务,我们进行编译操作的配置.
1 | { |
launch.json
这里是启动配置,这里配置了调试的配置信息.
1 | { |
代码篇
输出中文乱码
以"小熊猫C++"IDE为例.

检查右下角是否为UTF-8编码,如果是,则需要转换为ANSI编码:

其他软件类似,这种问题就是GBK
和UTF-8
编码不兼容的问题.
Windows默认GBK编码,因此兼容性不佳(一般都是用UTF-8编码比较常见).
输入输出
字符串操作
栈溢出与安全问题
风格篇
代码格式化
---WAHAHA