C】还债、拾遗
超自然祈祷
让计算机成为我们的左膀右臂
--searching for what I need in the world
展开
-
C编写的程序可能产生的主要缺陷
摘自:软件静态分析工具评析 王 凯,孔祥营空指针引用、悬空指针、资源泄露、函数返回值、使用未初始化变量、无限循环、死亡代码、缓冲区溢出、野指针等。1)空指针引用空指针引用会导致程序崩溃。空指针引用的情况包括:①忘记对指针为NULL 的情况进行判断;②虽然对指针是否为NULL 进行了判断,但没能正确处理好。2)缓冲区溢出缓冲区溢出是最常见的安全漏洞,包括静态溢出和动态溢出。静态溢...转载 2019-11-07 14:24:19 · 976 阅读 · 0 评论 -
c语言输出0.000000或乱码,深究
刚刚看到一篇帖子,发现我刚学编程时也遇到过,后来问同学要了代码(额)过了就没再管……现在看到了,接触的底层东西也多了,觉得有必要深究一下。问题链接(已经有大佬解答了):https://fishc.com.cn/thread-147817-1-1.html这是他的代码:#include <stdio.h>int main(void){ int a,t,c; ...原创 2019-10-07 16:00:53 · 8019 阅读 · 1 评论 -
谭浩强第2版教材里放到提高中的内容:移位、宏定义……位段(位域)、条件编译……
移位:以下来自:https://zhidao.baidu.com/question/165145005.html移位 -- 不是“位移”操作n<<3,2进制,左移3位,就是 n=n*2*2*2, 就是n*80,1,2,3 -- 变 0,8,16,24x >> 24 最高字节 移到最左, & 0xff 取出来。x >> 16 第二...原创 2020-02-26 18:24:44 · 649 阅读 · 0 评论 -
教材里没有的:【位域】结构体里后缀“: 1”或者“: 4”
有的结构体定义里成员后面还跟个”:1“或者”:4“…… 这个问题是看交给我维护的结构体代码时发现的,因为过去没见过,百度了一下还不错找到了意思解释,然后自己又用sizeof()试了试,挺好玩的,分享出来~ 是个啥玩意=========分割线=========得知自:https://wenwen.sogou.com/z/q771353044.htmstruct BIT16_fl...原创 2018-12-09 16:48:23 · 4515 阅读 · 4 评论 -
把指针彻底说清楚
“就像英语一样,经常这么用的就约定俗成了需要背诵的短语,指针本来也是可以随便去用(因为指针本来就是内存上的页码,页码里存的是段落),只不过既成的数据类型、常用的习惯以及对程序崩溃的恐惧让我对指针始终了解不透彻。”1.指针习惯用法定义一个指针,一定要指向已有变量、或者malloc/new才可以使用,不然就是野指针,无法使用!C的malloc(free)。malloc就是memo...原创 2018-12-27 23:20:22 · 474 阅读 · 0 评论 -
C文件指针小例
使用文件的方式共有12种,下面给出了它们的符号和意义。文件使用方式 意 义“rt” 只读打开一个文本文件,只允许读数据“wt” 只写打开或建立一个文本文件,只允许写数据“at” 追加打开一个文本文件,并在文件末尾写数据“rb” 只读打开一个二进制文件,只允许读数据“wb” 只写打开或建立一个二进制文件,只允许写...转载 2017-09-27 12:46:41 · 336 阅读 · 0 评论 -
基础_C各种表
每个表长度过长,请使用目录挑选查看转义字符表转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT) 011 \\ 反斜杠 092 \? 问号字符 06原创 2017-05-31 13:33:36 · 864 阅读 · 5 评论 -
[]数组_函数调用数组 、指针数组、结构体数组
话不多说,上代码函数调用数组 #includevoid main(){ void f1(int a); void f2(int x[]); int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; f1(a[9]);//函数调用数组元素 f2(a);//函数调用数组(数组名存的就是数组首地址)}void f1(int a)//就像调用一个变量一原创 2017-05-13 18:43:15 · 2141 阅读 · 0 评论 -
指针_三种方式访问成员、动态内存分配【就当做笔记了】*、动态链表
指针的三种访问成员的方式参照自P304,谭浩强《C程序设计》第四版 #include<stdio.h>int main(){ struct stu//自己定义的stu类型 { int num1 = 1; int num2 = 2; int num3 = 3; }member; stu *p = &member;//member 即 成员名...原创 2017-06-23 16:29:29 · 1468 阅读 · 0 评论 -
函数&变量_声明、定义、调用\引用
引例——在高中数学里,我们有y=f(x);f(x)=3x;在C语言里我们有:#include<stdio.h>int f(int a){ return 3 * a;}int main(){ int y; int x = 3; y = f(x); printf("%d", y);}下面说一下函数的 声明、定义、调用 声明:”我先告诉系统有这个东...原创 2017-05-13 13:11:06 · 2058 阅读 · 0 评论 -
字符、地址详解(及字符串指针、字符数组关系)
前驱结点:指针、输入输出(请参照本专题其他文章)地址是什么地址,就是计算机找东西的“位置编号”。内存,就是那个“位置编号”里存的东西。是不是很形象?“地址”和“你想找的房子(内存)”地址在汇编语言、编译原理、计算机组成原理课程中都有提到,但是在高级一些的语言就见不到了,被隐藏了。汇编和编译原理中提到的地址用在数组上,汇编、操作系统的寻址,组成原理的”程序内存原创 2017-06-24 09:45:35 · 8102 阅读 · 0 评论 -
指针_基本概念
一段源代码,要说的在注释里写了指针变量前面 的“*”表示 该变量的类型 为指针型变量。(引自P223,谭浩强《C程序设计》第四版)这句话让我明白了指针一直混淆的两种声明方式(详见代码注释)#include void main(){ int a = 100; //指针变量前面 的“*”表示 该变量的类型 为指针型变量。【所以不应是int* p】(引自P223,谭浩强《C原创 2017-04-29 15:23:27 · 485 阅读 · 0 评论 -
基础_输入输出的函数原型、(格式控制符)
转义字符详见本专题的【基础_C各种表】书中:P78部分:printf()scanf()putchar()getchar()P151部分(字符数组):puts()gets()stract()strcpy(,)\strncpy(,)strcmp(,)strlen()strlwr()strupr()上面就列一下,太多原创 2017-06-23 22:53:02 · 1165 阅读 · 0 评论 -
*指针_函数指针、指针控制数组、静态链表(结构体指针)
指针的相关基本概念在之前的文章: 指针_基本概念 里讲过 r->和(*r).r->这种写法和(*r).是完全等效的,但是省去了两个字符。strcpy((*r).name,"Leigh");您可以像对待一个普通结构体变量那样对待*r,但在遇到C的操作符优先级问题时要小心。如果去掉*r两边的括号则代码将无法编译,因为“.”操作符的优先级高于“*”操作符。使用结构体指针时...原创 2017-05-14 12:18:28 · 643 阅读 · 0 评论 -
教材中没讲的goto语句
#include int main(void) { int i, sum = 0; i = 1; loop: if (i <= 100) { sum = sum + i; i++; goto loop; } printf("%d\n", sum); return 0;}只能在goto所在(当前)函数内放loop那种标签原创 2017-05-04 16:51:22 · 377 阅读 · 0 评论 -
变量_存储类别、生存期
书中函数第7章,7.8节及以后的部分,这部分是学了函数后才用得到的,不过用上了函数的话这些概念就十分重要了auto自动、static静态()、register寄存器(快)#include /*书中函数第7章,7.8节及以后的部分,这部分是学了函数后才用得到的,不过用上了函数的话这些概念就十分重要了*/int h;//定义全局变量,有效范围从此定义开始到本源文件结束vo原创 2017-05-13 14:13:48 · 357 阅读 · 0 评论 -
函数_内部&外部/全局&局部_函数/变量
此章节“前继节点”为【函数&变量_声明、定义、调用\引用】,请萌新先看完那一讲 什么东西,知道了原理就能得心应手。当初学C语言的我,自以为真正要用的就那么些语句,并不知道原理,所以一编程就出错还不知道怎么去改。 【建两个文件,并且都在vs的同一个工程里】一、extern 1.用extern扩展变量的作用域——将外部文件或函数的变量的作用域扩展到“我这里”...原创 2017-05-11 21:09:16 · 524 阅读 · 0 评论 -
数据类型(结构体)_类型,变量,成员;以及typedef
(拾遗也是备忘)还是老样子,想说的话都在注释里,如果你的vs配色调得好的话应该比直接这么看省劲类型与变量比如 int a 就是 类型int 变量a就这么简单,不要怕,只不过后来的类型都是自己编的而已,是同样的东西而已。成员是自己编的类型里的各种“数据项”【具体的就在下面第一个结构声明的注释里】(学数据类型这一章时我 类型,变量,成员 都没搞懂(#捂脸),后来学了c艹才有感...原创 2017-05-01 18:48:31 · 905 阅读 · 0 评论 -
函数_调用指针交换函数(形参与实参)
例子引自,谭浩强《C程序设计》第四版 P226~P229例子#include void main(){ void swap1(int *p1, int *p2); void swap2(int *p1, int *p2); int a, b; int *p1, *p2; scanf("%d%d", &a, &b); p1 = &a; p2 = &b; if (a < b)原创 2017-04-29 21:15:43 · 962 阅读 · 0 评论