C语言(科普和问题解答)
C语言一些科普类知识,C语言常见错题,C语言常见的各种错误。
辉小歌
九局下半转啊转,我把帽子反戴,还在期待逆转。
展开
-
C/C++写函数的时候函数名不要用div
写函数的时候,函数名一定不要起div。会有奇怪的错误。例如:答案显然不对。当我们换个名字就对了。这其实是因为我们的函数名冲突了。C ++里早就已经有个函数名叫div,这里调用的实际上是那个函数并非我们写的那个div函数。这也说明我们命名的时候尽量不要冲突。...原创 2022-04-24 16:14:30 · 1465 阅读 · 0 评论 -
对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】
故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了。用scanf()却一直的报错或者陷入了死循环。这让我很费解,我用了fflush(stdin)来排除,发现没有效果。后来我想起之前写过关于scanf()的原理详解的文章。又看了一看才猛然发现了其中的原理。c语言scanf()函数的原理问题描述随便的举个例子:输入一个5x5的字符矩阵,然后让你原样输出我们在做题的时候,有时候会遇到上面的那种多行的输入,我们一般为了方便的调试看我们的代码。一般习惯直接复制案例,然后粘贴到我们的.原创 2021-04-13 09:33:04 · 1071 阅读 · 0 评论 -
使用next_permutation()的坑,你中招了么?
目录问题描述解决猜想总结今天在做一道题,结果答案始终不对,思路虽然有点笨吧,但是方法一定是没有问题的。经过一系列的排除,发现是next_permutation()函数的问题。问题描述http://oj.ecustacm.cn/problem.php?id=1301做这道题的时候,一看不就是一个全排列么?。用next_permutation()函数就完了#include<cstdio>#include<algorithm>#include<cmath>原创 2021-03-28 10:13:27 · 2248 阅读 · 2 评论 -
用构造函数来完成结构体的初始化
前言说到结构体的初始化,人们会自然的想到先定义一个结构体变量,然后对其中的元素逐一赋值,以达到初始化的目的。但是如果这样做,当结构体内变量很多时并不方便,此处介绍一种使用“构造函数”的方法来进行初始化,供读者学习。所谓构造函数就是用来初始化结构体的一种函数,它直接定义在结构体中。构造函数的一个特点是它不需要写返回类型,且函数名与结构体名相同。例子:struct student{ int id; char name; //默认生成的构造函数 student(){}};“ stude原创 2021-03-09 13:56:48 · 4646 阅读 · 0 评论 -
轻松搞懂sscanf和sprintf
目录我们先回顾一下 scanf 和 printf 如果想要从屏幕输入int型变量n,并将int型变量n输出到屏幕。写法是这样的:scanf("%d",&n);printf("%d",n):事实上,上面的写法其实可以表示成下面的样子,其中screen表示屏幕:sscanf(screen,"%d",&n);sprintf(screen,"%d",n);可以发现,scanf的输入其实是把screen的内容以"%d"的格式传输到n中(即从左至右),而printf的输出则是把原创 2021-03-08 20:25:22 · 507 阅读 · 0 评论 -
【C / C++ 】memset函数
目录memset函数介绍用法案例memset函数介绍概念:memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值,这个函数通常为新申请的内存做初始化工作。即:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。需要的头文件: <string.h>函数原型: void *memset(void *s, int ch, size_t n);函数解释: 将s中当前位置后面的n个字节 (t原创 2021-03-08 19:34:35 · 2368 阅读 · 1 评论 -
【C / C++】关于数组太大在编译器不能运行问题
例子:你会发现数组定义的太大大于106时就会出现不能运行的错误。当我们定义的少一点的时候,就可以运行了。当我们把数组定义为全局变量时,数组大于106仍然可以正常地运行。原因如果数组大小较大(大概106),则需要将其定义在主函数外面,否则会使程序异常退出,原因是函数内部申请地局部变量来自系统栈,允许申请的空间较小,而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。...原创 2021-03-08 19:13:58 · 6619 阅读 · 2 评论 -
【C / C++】关于数组默认初值问题
通过上图不难总结出:当数组在全局变量区定义时,默认初值为0。当数组在局部变量区定义时,如果不写“ {} ”,则默认的初值为乱码。当数组在局部变量区定义时,如果写“ {} ”或给某几位赋值时,则其他未赋值的数默认初值为0。....原创 2021-03-08 15:06:21 · 7563 阅读 · 3 评论 -
sizeof()浅解
sizeof()是用来运算一个类型占几个字节的运算符。注意:仅仅是一个运算符,并无其他的功能。不会进行其他的运算。例:由上图你会发现sizeof()里的++a和a++,都是没有进行运算的。由此可以确定sizeof()就只是一个用来计算一个类型有多少字节的运算符。...原创 2021-01-17 21:20:33 · 404 阅读 · 0 评论 -
用C语言输出一个字符串的所有子串
前言啥是字串? 串中任意个连续字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。①空串是任意串的子串。②任意串是其自身的子串。例:字符串"12"它的字串为"1",“2”,“12”,空串。共四个字串。原理懂了子串的概念我们来分析一下原理:当字符串是"1"的时候字串为:“1”空串字串个数为2=1+1当字符串是"12"的时候字串为:“1” “12”“2”空串字串个数为4 =2+1+1当字符串是"123"的时候字串为:“1” “12” “123”“2原创 2020-11-12 22:14:18 · 12277 阅读 · 4 评论 -
手把手教你写C语言的动态库的开发
前言动态库的概念: 动态库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容 — 百度百科之前又写过手把手教你C语言静态库的开发静态库的缺点:当你调用静态库编译后,生成exe后。静态库的东西都会直接嵌入到里面。这样你的exe程序会很大。而动态库则是动态的调用的。它和你的exe程序是分开的,是原创 2020-11-08 16:55:45 · 3418 阅读 · 0 评论 -
手把手教你C语言静态库的开发
前言静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。–百度百科简化来说就是: 实现代码块的反复利用,静态库类似于一个接口。举一个简单的例子: 假如说,你写了一个函数里面实现了一个很厉害的功能。你的一个好友想用你这个函数。但是你不想让他知道内部函数是如何实现的,只是想让调用这个函数。那么静态库就可以满足你这样的需求。你只需把声明函数的头文件给他,和静态库文件给他就行了。他就可以直原创 2020-11-08 10:56:52 · 1142 阅读 · 0 评论 -
malloc()之后free报错的原因[详细解析]
前言今天闲着没事去敲一些简单的编程题来复习复习,结果在用free()函数的时候报错了。由此引发了我的思考。题目如下:输入一串字符,以“?”结束。统计其中字母个数,数字个数,其它符号个数。例:输入 ab123!?输出 Letters=2 Digits=3 Others=1解题思路:按照我平常思路的话用一个char数组,来保存字符串,再用判断语句统计。但是毕竟是来复习的,想着好久没有用malloc()函数,于是就想着用动态分配内存的方法来解决它。我的代码如下:#includ原创 2020-11-07 14:12:54 · 4500 阅读 · 2 评论 -
编写一个c程序的头文件
目录前言第一步、创建一个空项目第二部、创建cpp文件第三步、创建头文件最后、调用头文件前言我用的是编译器 visual studio2010编译器。无论是哪个编译器创建头文件的过程都是一样的。为啥要用写一个头文件?在我看来用头文件是十分简洁的,当我们写的函数特别多的时候。如果把这些函数和main函数放在同一个文件内特别的不简洁。但是写一个头文件,我们就可以在main()函数内直接调用我们头文件里的函数了。话不多说,下面跟着我的步伐来写一个最简单的头文件吧!第一步、创建一个空项目第原创 2020-11-02 18:41:49 · 1263 阅读 · 0 评论 -
visual studio创建项目时需要注意的问题
visual studio创建项目时需要注意的问题Win32项目中,只能使用WinMain函数 。Win32控制台程序中只能使用main函数 。原创 2020-11-02 17:32:13 · 215 阅读 · 0 评论 -
用C语言播放mp3格式的音乐
目录前言之前有写过在c程序里添加背景音乐,用的是PlaySound这个函数不过这个函数是只能播放wav格式的音乐。这次是用mciSendString函数可以用来播放MP3格式的音乐如何用c语言插入(背景)音乐mciSendString函数简介mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,需要的头文件#include <mmsystem.h>基本的播放音乐模板#include<windows.h>#i原创 2020-10-25 09:12:54 · 26031 阅读 · 68 评论 -
将一个C程序打包
目录成品效果图前言原理具体流程成品效果图当我们点击的时候我们的程序就可以直接运行。且这个程序所需要的东西都已经在.exe这一个程序中。没有多余的文件夹等其他东西。前言最近脑子里突然有了一个想法,如何将一个C程序打包?为啥有这个想法呢,是因为我以前写了一个c程序游戏,这个游戏里用到背景音效和贴图。我们都知道写程序的时候,要写你加入的音乐的路径,图片的路径。我们习惯把音乐和各种添加的东西和我们的c程序放在同一个文件夹。因为这样方便快捷。但是如果我们想把我们的程序弄到桌面上时,如果仅仅的原创 2020-10-19 18:10:24 · 3967 阅读 · 2 评论 -
反汇编C程序
原创 2020-10-07 18:11:02 · 392 阅读 · 0 评论 -
关于 \8 为56问题解答
关于 ’ \8 ’ 为56问题解答我们都知道上面的这个表看一下 下面的例子a='\7'; // '\7' 它是一个字符 值为7 给了 字符ab='\17'; // '/17' 它是一个字符 值为7 +1*8等于 15 给了 字符bc='\x17'; // '/17' 它是一个字符 值为7 +1*16等于 23 给了 字符c上面的例子我们都十分的清楚但是看下面这个例子上面这个一看是不是特别的懵逼。我一看也是特别的懵逼。我原以为和溢出有关,但是发现无从下手,原创 2020-06-01 18:01:42 · 1832 阅读 · 0 评论 -
通过数组名遍历整个数组
数组名它就是一个指针,指向这个数组的起始地址原创 2020-05-19 11:08:11 · 319 阅读 · 0 评论 -
函数指针的两种调用方式
void test(int);int main(void){void (*fp)(int); fp=test; (*fp)(9); fp(9); return 0;}void test(int a){ printf( "%d\n", a );}这两种形式是等价的,都是为ANSI C所接受的。历史上,贝尔实验室的C和UNIX的开发者采用的是第一种观点QUOTE:(*fp)(9);而Berkeley的UNIX的扩展者采用第二种观点QUOTE:fp(转载 2020-05-16 20:35:09 · 9188 阅读 · 1 评论 -
练习C语言二级编程题的一些问题
现在,C语言二级考试 写程序用的编译器都是 Microsoft Visual Studio 2010(简称VS)所以,一些习惯用VC 6.0的人十分的不习惯下面是一些常见的问题VS 2010 不能编辑代码的问题VS它是要自己建工程才能编译的,VC2010不像VC6.0那样直接自动帮你新建工程了;所以你直接打开: .c 文件是不能编辑的解决办法: 打开: .sln文件 找到源文件.c 文件就可以 编辑和运行了自己写的对,系统给0分问题我个人喜欢用VC 6.0 所以,在做题的时候,我原创 2020-05-16 16:44:37 · 604 阅读 · 0 评论 -
指向字符串的指针为何不能用来修改此字符串
目录指向字符串的指针为何不能用来修改此字符串为何char a[ ]可以修改字符串指向字符串的指针为何不能用来修改此字符串如上图操作,指向字符串的指针不能用来修改此字符串,会出错。这是因为:char *p="hello"; 等价于 const char *m="hello";对于指针p,无非就是一个地址的拷贝,也就是"hello"地址的拷贝。"hello"保存在静态的存储区,该数据不能修改。故不能通过指针p修改数据区的值为何char a[ ]可以修改字符串为啥它可以修改呢?原创 2020-05-13 18:11:23 · 3670 阅读 · 2 评论 -
堆和栈
栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在原创 2020-05-13 10:34:47 · 140 阅读 · 0 评论 -
指针数组 数组指针 函数指针 指针函数
目录数组指针指针数组函数指针指针函数数组指针数组指针的本质: 它是一个指针,指向的是一个数组数组指针定义: int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n。指针数组指针数组的本质:它是多个指针,即它是一个由指针组成的数组指针数组定义: int *p[n];[]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。函数指针函数指针的本质:指向函数的指针变量,即本质是一个指针原创 2020-05-11 22:38:44 · 201 阅读 · 0 评论 -
easyx程序实例
目录一、由上向下慢慢的加载图片二、鼠标操作一、由上向下慢慢的加载图片#include<stdio.h>#include<stdlib.h>#include<Windows.h>#include<string.h>#include<graphics.h>int main(void){ initgraph(600,400);//定义窗口的大小 IMAGE mg; int i,j; i=j=0; loadimage(&m原创 2020-05-09 16:51:06 · 946 阅读 · 0 评论 -
EasyX制作掩码图
EasyX制作掩码图本文是转载的,原博客:https://blog.csdn.net/qq_35130321/article/details/80709290 在用第三方库EasyX需要用掩码图实现透明贴图。下面说一下如何制作掩码图。先准备一张黑底的原图,使用PS进行操作,用PS打开那张图。①在上方的转载 2020-05-09 10:38:49 · 1518 阅读 · 0 评论 -
字符串和字符数组
字符串和字符数组字符串字符数组关于%s的问题字符越界和出现乱码问题溢出字符串字符串是 "" 号赋值的例:char a[]="hello";//长度为6 最后加了一个 ' \0 '或char a[6]="hello";字符串会自动的在最后加一个'\0'的结束符,字符数组字符数组是一个一个的赋值例:char a[5]={'1','2','3','4','5'};//长度为5...原创 2020-05-06 11:17:43 · 6245 阅读 · 3 评论 -
Beep()函数
beep()函数Windows API 就提供了一个奇妙的发音函数,它就是Beep函数。Beep可以通过控制主板扬声器的发声频率和节拍来演奏美妙的旋律。函数原型:BOOL Beep( DWORD dwFreq; //指定发出的频率 DWORD dwDuration; //指定发声的时常 毫秒为单位); 下面是一些大牛写的,关于beep()函数的详细用法1详细用法...原创 2020-05-02 22:58:25 · 4753 阅读 · 0 评论 -
C语言易错题集 第四部
C语言易错题集 第四部一、位操作相关一、位操作相关执行"int x=1;int y=~x;"语句后,y的值为?A 1B 0C -1D -2答案: Dx = 00000001~x = 11111110,~x为负数,负数在计算机中用补码表示,所以符号位不变,取反加1y = 100000010...原创 2020-06-08 06:03:44 · 1027 阅读 · 0 评论 -
C语言易错题集 第三部
目录一、C语言程序exe相关一、C语言程序exe相关用 C 语言编写的源程序须经过编译连接后,生成扩展名为 .exe 的可执行文件,才能运行。()A 正确B 错误答案: BC语言编写的程序,肯定是要经过一系列的编译,链接,生成可执行的文件。在windows系统中,执行文件都是.exe为扩展名的。不过在linux系统中就不一样了,linux系统并不区分扩展名,所以也就无所谓什么.exe之类的文件,只要知道最终生成可执行的二进制文件就可以了。...原创 2020-05-15 19:26:47 · 4345 阅读 · 0 评论 -
C语言易错题集 第二部
C语言易错题集后续一、共用体相关(union)一、共用体相关(union)问题: 共同体变量所占的内存长度等于最长的成员的长度。请问这句话的说法是正确的吗?答案: 错误共同体类型的特点(1)同一共同体内的成员共用一个存储区,存储区的大小=成员占用字节长度最大值。【需要考虑内存对齐】 对齐问题: 1.一般而言,共用体类型实际占用存储空间为其最长的成员所占的存储空间; 2...原创 2020-05-07 10:48:28 · 1067 阅读 · 0 评论 -
C语言易错题集 第一部
一、 int i=10,j=2; i*=j+8; printf("%d\n",i);问: 输出啥?结果 : 100原因: *= 的优先级小于 +运算过程:i *= j+8;i = i *(j+8);i = 10*(2+8);i = 100;二、#include<stdio.h>#include<string.h>int m...原创 2020-04-29 21:30:28 · 1463 阅读 · 0 评论 -
C语言常见的习题
C语言常见的习题给你一串数,输出最大的数输出1-n之间的质数剔除掉多余的空格用递归计算1~n的和给你一串数,输出最大的数#include<stdio.h>int main(void){ int a[5]={34,56,2,33,7}; int i,max; max=0; for(i=0;i<5;i++) { if(a[i]>a[max]) max...原创 2020-04-22 18:28:56 · 1512 阅读 · 1 评论 -
字符串整体赋值和比较问题
字符串整体赋值问题char a[10]="hello";a="word";//这里是错误的不能整体赋值因为:数组名的实质是指针常量,你不能给一个指针常量修改。解决方法:1字符串整体比较问题...原创 2020-04-28 17:13:10 · 2164 阅读 · 0 评论 -
字符移动问题
字符移动问题比如:我们要把字母A,按照字母表向后移动3位#include<stdio.h>int main(void){ char a='A'; char b='A'; a=a+3; //A是char型,3是int型,A对应ASCLL码65,65+3=68对应字母D b=b+'d'-'a'; //65+(68-65)=68对应字母D printf("%c\n"...原创 2020-04-15 21:09:30 · 580 阅读 · 0 评论 -
给C语言程序换图标
目录在vs2010中给C语言程序换图标在vc 6.0中给C语言程序换图标平常我们编译运行后生成的exe程序的图标是这样的:那么如何把图标弄成我们想要的图标呢?接下来我就和各位说一说。我们首先要知道: 图标格式的图片的后缀是 .ico 格式的。要想给C语言程序换图标,我们首先要把我们想当图标的图片格式弄成 .ico格式。这里给大家推荐:一款在线的格式转化工具的网址:https:...原创 2020-04-06 23:40:05 · 4453 阅读 · 0 评论 -
C语言整形提升题
整型提升整型提升: 是C程序设计语言中的一项规定:在表达式计算时(包括比较运算和算术运算等),比int类型小的类型(char, signed char, unsigned char, short, unsigned short等)首先要提升为int类型,然后再执行表达式的运算。例题:...原创 2020-04-02 15:06:33 · 185 阅读 · 0 评论 -
C语言鼠标失灵程序
C语言鼠标失灵程序运行效果:鼠标失灵,运行窗口是不会显示的。结束操作:在cmd下用taskkill 命令强制关闭。代码如下:#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>#include<time.h>#pragma comm...原创 2020-03-28 23:19:50 · 1140 阅读 · 6 评论 -
c语言运行时隐藏dos窗口
c语言运行时隐藏dos窗口只要加一个这个语句就行了。#pragma comment(linker,"/subsystem:“windows” /entry:“mainCRTStartup”")例:原创 2020-03-18 08:16:34 · 1228 阅读 · 0 评论