C programming language
文章平均质量分 72
C语言笔记
m0rta1
优秀的判断力来自经验,但经验来自于错误的判断。涉及领域: Java后端开发/前端开发/PHP/Python/WEB安全/逆向+PWN/云计算
展开
-
密码学: Vigenere 密码法实现文件加密与解密 (C 语言)
题目:文件的传输会有明文和密文的区别,明文发送是不安全的。本题目实现对文件的加密和解密操作,采用的加密算法是根据密钥将明文中的字母置换为其它字母,所有字母不区分大小写,不考虑除英文字母外的字符。例如:明文是:They will arrive tomorrow,密钥k=Monday,具体加密过程如下:① 设置英文字母与0到25有如下的对应关系:②依据上述对应关系将明文和密钥转化为一组数字:k=(12,14,13,3,0,24)m=(19,7,4,24,22,8,11,11,0,17,17,8,21原创 2021-06-08 00:24:10 · 3425 阅读 · 10 评论 -
问题记录:multiple definition of `xxxx` 问题解决 && struct定义类的error:“unknown type name“
一、multiple definition of xxxx 问题解决问题背景我在一个头文件里面定义了一个变量,并赋予初值,然后再两个.c 文件里引入了这个头文件,结果就报错 multiple definition of xxxx 错误问题排查:在一个.h文件中定义了一个变量,而这个.h文件被多个文件包含,单独编译都没有问题,但是到链接的时候就出现问题了。在多个.o文件中包含此代码。最后在编译器链接的时候,就会将工程中所有的符号整合在一起,由于文件中有重复的变量,于是就会出现重复定义的错误,原创 2021-06-05 11:31:58 · 5089 阅读 · 0 评论 -
C语言连接Mysql数据库(Windows && Linux)
前言:前阵子天接了一个C语言数据结构与算法期末综合作业的单子,客户要求做一个连连看小游戏,要求使用至少四种算法实现功能,并且玩家完成游戏后把分数记录到MySQL数据库中。再此之前我从未使用C语言连接过数据库,只会 Java 、Python 连接数据库操作,我一开始跑去问学嵌入式的学长如何实现 C 语言连接数据库, 结果他也不会…那我只能百度呀百度,但是百度别人写的还是不够详细,我按照要求引入 mysql.h, libmysql.lib 还是各种报错,搞得我心态有点崩了,特此记下详细实现不同操作系统下C原创 2021-06-05 10:30:46 · 18909 阅读 · 13 评论 -
C语言 :~scanf 与 scanf 天差地别
今天刷 PTA —1010题 的时候,写完这个题目后,再去百度看看别人写的代码比较比较 , 发现 别人的代码中 有 ~scanf , 以前写代码没用过,现在在此总结一下题目较为简单,不给予解释#include<stdio.h>#include<string.h>#include<stdlib.h>int main(void) { int coe, exp, flag = 0; while (~scanf("%d%d", &c.原创 2020-06-15 08:03:43 · 1128 阅读 · 0 评论 -
PAT-乙级 1009 说反话(C语言)栈解法
前言网上基本都是c++ 栈写的这个题,这里提供一种c语言 栈解法题目:分析:这个反话不是逐个字符的反,而是单词反。可以把每一个字符串压入栈中,利用栈的先进后出来实现了,用的顺序栈。代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#define ERROR 0;struct Str { char Alphbet[81][81]; int top; int原创 2020-06-08 23:08:25 · 694 阅读 · 0 评论 -
PAT 乙级 Practice |(1008)C语言 --链表解法
前言:这段时间把数据结构第三章学完,想找几个题来巩固一下自己的知识点,以下这道题一眼看出用链表来写(题目要求:在不允许使用另外数组的前提下),正好来检验下自己链表学的怎么样。网上的基本都是c++,或者其他语言写的,没有看到C语言版本,以下是用C语言写的链表来解决这道题,如果有不足之处,请评论区留言。题目:代码展示:(解析看注释)#include<stdio.h>#include<string.h>#include<stdlib.h>struct原创 2020-06-07 15:24:19 · 305 阅读 · 0 评论 -
C语言:指针中 * 与 & 同时使用引发的思考
请看以下例子:我的分析:*p 是指针指向的值,&*p 是指针指向的值的地址,也就是 指针指向的当前 地址,可以理解。&p是指针自己的地址, * &p就是指版针变量本身了。 那指针自己的地址的值是多少呢?正确理解:第一种理解:* 用于语句里的指针变量时,表示指针指向的值。例如:printf("%d", *pa);&用于语句里的普通变量时,表示求普通变量的地址。例如:int a; pa=&a; &*pa==*&a原创 2020-06-03 14:28:37 · 2255 阅读 · 0 评论 -
C语言: 数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针):定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;转载 2020-05-31 16:42:02 · 1574 阅读 · 0 评论 -
C语言: 用指针访问二维数组 + 二级指针开辟空间
怎样用指针访问二维数组呢?先来回忆一下怎样用指针访问一维数组。在访问一位数组时,我们实际上声明的是一个和数组元素类型相同的指针变量,指向了数组第一个元素的地址,然后在用这个指针访问数组。比如访问 int b[3]= {1,2,3}:b 中的元素为int类型,所以我们要声明一个int类型的指针变量 如int *p ,然后将p指向b的第一个元素的地址,即p = &b[0],数组的首地址和第一个元素的地址是一样的,所以也可以用p=b。这里需要强调的是,指针类型和数组元素的类型一致,而原创 2020-05-31 16:31:01 · 3215 阅读 · 0 评论 -
C语言 : strcmp与strncmp详解
strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串。strcmp设这两个字符串为str1,str2,若str1==str2,则返回零;若str1 > str2,则返回正数;若str1< str2,则返回负数。即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。如:strcmp(“abcd”,”abcd”)的返回值是 0;strcmp(“abcd”,”dcba”)的返回值是 -1;strcmp.原创 2020-05-26 23:42:37 · 2974 阅读 · 0 评论 -
C语言 :复合类型(结构体,共用体,枚举)小结
文章目录结构体的定义以及赋值结构体大小和内存结构结构体数组结构体和指针结构体作为函数参数结构体嵌套结构体共用体(联合体)枚举typedef 关键字结构体的定义以及赋值1、复合类型在内存中存放的模型:2、定义结构体格式:struct 结构体名称 { 结构体成员列表 } ; 分号结尾3、在主函数中结构体表述格式:定义结构体变量:① struct 结构体名称 结构体变量名② 结构体变量名.机构体成员列表 = 值注: 如果是字符串类型 需要使用strcpy;4、赋原创 2020-05-16 00:38:38 · 1235 阅读 · 1 评论 -
C语言 : 乙级 1002 题
题目:代码#include <stdio.h>#include <string.h> int main(void){ //part 1:计算输入数字每一位的和 int sum = 0; char ch; ch = getchar(); while (ch != '\n') { switch (ch...转载 2020-05-06 22:05:15 · 132 阅读 · 0 评论 -
C语言 : 几种常用的内存操作函数汇总
什么是内存操作函数?就是一些能操作计算机内存的C语言内置函数在讲这些库函数之前, 先讲一讲c语言内存分配几种方式:从静态存储区域分配这种方式主要是系统用于自动分配给全局变量、static变量内存资源的. 它们在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.在栈上分配这种方式主要是用于系统自动分配给函数内部的局部变量的,函数内局部变量的存储单元都可以在栈上创...原创 2020-05-02 11:21:40 · 4462 阅读 · 0 评论 -
内存四区模型图解
原创 2020-04-30 10:01:16 · 393 阅读 · 0 评论 -
C语言:字符串排序算法思考
加粗样式## 要求:根据字符串首字符 按照a-z的顺序排序student tree new bee => bee new student tree使用三种方法比对两个字符串的首字母:1数组判断2指针判断3混合判断公共部分:#include<stdio.h>#include<string.h>#include<stdlib.h>...原创 2020-04-11 17:32:43 · 576 阅读 · 0 评论 -
C语言中函数形参与实参的区别
形参:在定义函数时指定的参数,在未出现函数调用时,他们并不占用内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。在函数调用结束后,形参所占用的内存单元也被释放。实参:即你调用函数时传递的参数。实参可以是常量、变量、表达式。注意:形参和实参实际上占用的是两份不同的存储单元。形参和实参之间的传递在c语言中,实参与形参的数据传递是“值传递”,单向传递,只能由实参传给形参,不...转载 2020-04-05 17:49:14 · 639 阅读 · 0 评论 -
C语言:翻转字符串数组的两种方法
第一种指针类型:#include<stdio.h>#include<string.h>#include<stdlib.h>char rec(char*arr) { int len = strlen(arr);//11 //字符串首地址 char* p = arr; //字符串最后一个有效字符的地址 char* p1 =&arr[le...原创 2020-03-26 00:15:45 · 3634 阅读 · 0 评论 -
C语言:指针版冒泡排序算法
冒泡排序的基本思想:如果要对n个数进行排序就需要进行n-1次比较,在第一轮比较中要进行n-1次两两比较,在第j轮中进行n-j次两两比较。算法解释请看代码注释:#include<stdio.h>#include<string.h>#include<stdlib.h>//#include <inttypes.h>//64位编译 sizeof返...原创 2020-03-25 17:41:28 · 11302 阅读 · 1 评论 -
C语言:数组与指针之 p++ 操作的细节问题(p是指针)
请看如下代码:#include<stdio.h>#include<string.h>#include<stdlib.h>int main(void){int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };int* p = arr;p++;*p = 200;for (int i=0;i<10;i++) { pr...原创 2020-03-25 00:23:54 · 1581 阅读 · 0 评论 -
C语言:const修饰的常量,不能被直接修改 ,但是可以通过指针进行间接修改所出现的一些问题解释
前言:在学习黑马教学const修饰指针的时候,碰到一个问题如下 在.cpp文件下编译时出现报错,.c文件下不报错 。这种能骗过编译器的写法不提倡。在严格的编译器上都是UB(undefined behavior )行为无法通过编译。1. .cpp文件:问题分析:类型不对 要改成int*p=(int*)&a,而且用指针去访问一个不对的东西,访问就是读写,是一个未定义行为。改成...原创 2020-03-24 17:12:25 · 864 阅读 · 0 评论 -
C语言:关于sizeof返回值的理解
我学指针的时候发现,64位编译会出现如下情况,(当时百思不得其解,通过百度,问大佬总结以下几点):1.运算符 sizeof 的返回值是 unsigned 类型,x 是 int 类型,比较时会将 x 升级为 unsigned 类型,而 -1 变为 unsigned 类型是一个很大的整数。2、sizeof操作符能够得到一个结构的整体长度,包括因边界对齐而跳过的那些字节。3、sizeof 和 s...原创 2020-03-24 10:52:14 · 12623 阅读 · 1 评论