
C语言编程
形形色色的人
这个作者很懒,什么都没留下…
展开
-
CMake基础
CMAKE Guide原创 2017-07-26 13:47:03 · 480 阅读 · 0 评论 -
内存管理
原创 2020-11-12 21:50:26 · 86 阅读 · 0 评论 -
printf中的buffer
#include #include int main(void){ char str[10]; scanf("%s", str); //接收标准输入上的数据 printf("%s", str); // stdin-标准输入 stdout标准输出 stderr标准出错 while (1) { printf("%s", str); usleep(1000); }原创 2016-09-10 10:45:17 · 1884 阅读 · 0 评论 -
LIB和DLL的区别与使用
#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;typedef int(*CltSocketInit)(void **);typedef int(*CltSocketSend)(void *handle /*in*/, unsigned char *buf /*in*/,原创 2016-09-14 10:10:38 · 320 阅读 · 0 评论 -
大端小端
详解大端模式和小端模式一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下转载 2015-07-08 11:20:49 · 514 阅读 · 0 评论 -
c 文件拷贝 fopen fwrite fread
#include #include #include #include #define READ_BUFF 1024int main(int argc,char *argv[]){ if(argc < 3) { printf("./mycp sour dest\n"); return -1; } FILE * file原创 2016-03-28 14:03:17 · 1532 阅读 · 0 评论 -
C语言正则表达式
在很多人看来,正则表达式看上去古怪且复杂,因此往往不想去触及或使用。如果我们抛开这种“畏难”心理,在经过循序渐进地学习之后,就会发现这些复杂的表达式其实写起来还是相当简单的。一旦它被你所“驯服”,就可利用正则表达式把原需数小时辛苦且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。 正则表达式定义正则表达式(regular expression)是Linux系统中一种非常重要转载 2016-11-17 22:11:20 · 926 阅读 · 0 评论 -
C 文件操作
fread#define _CRT_SECURE_NO_WARNINGS#include #include #include typedef struct _Teacher{ int age; char name[128];}Teacher;int main(){ FILE * fileHandler = fopen("test.txt", "r");原创 2016-10-07 15:55:02 · 367 阅读 · 0 评论 -
函数指针
回调函数writtenby王保明1、函数类型基础函数三要素:名称、参数、返回值C语言中的函数有自己特定的类型C语言中通过typedef为函数类型重命名typedef type name(parameter list)typedef int f(int, int);typedef void p(int);原创 2016-09-13 15:21:10 · 652 阅读 · 0 评论 -
C语言隐式类型转换
隐式类型转换分三种,即算术转换、赋值转换和输出转换。1.算术转换 进行算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同 一类型的数据才能运算,算术转换原则为: 整型提升:对于所有比int小的类型,包括char, signed char, unsigned char, short, unsigned short,首先会提升为int类型转载 2016-12-16 21:59:19 · 480 阅读 · 0 评论 -
程序编译,链接过程
一、概述C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –转载 2017-05-03 10:48:29 · 447 阅读 · 0 评论 -
c strcpy strncpy
strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*. strncpy 拷贝数据,不包含最后的null-terminated.#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;int main(){ const ch原创 2016-07-04 16:29:33 · 369 阅读 · 0 评论 -
stack 生长方向以及破坏了stack导致程序dump
#include #include #include int func(int a, int b){ printf("b address = %d\n", &b); printf("a address = %d\n",&a); int arr[100]; printf("array address = %d\n", arr); //char *p = (char *)mal原创 2017-06-02 15:13:58 · 515 阅读 · 3 评论 -
二维数组模型之指针数组
#include <stdio.h>#include <stdlib.h>#include <string.h>#if 0int main(int agrc, char *argv[]){ int i = 0; for(; i< agrc; i++) { printf("agrv = %s\n", ar...原创 2018-08-20 14:40:30 · 222 阅读 · 0 评论 -
8086CPU的14个寄存器全称
通用寄存器:ax——accumulate register——累加器bx——based register——基地址寄存器cx——count register——计数器dx——data registered——数据寄存器段寄存器:cs——code segment——代码段ds——data segment——数据段ss——stack segment——栈段寄存器es—...转载 2018-11-22 09:27:17 · 3588 阅读 · 1 评论 -
va_list使用及原理
VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。下面是va_list的用法示例:#include int AveInt(int,...); void main(){ printf("%转载 2016-07-11 11:53:30 · 1903 阅读 · 0 评论 -
自动类型转换
对于自动类型转换,最常见的就是混合运算以及赋值运算,还有一种就是函数值的类型转换赋值运算:自动把“=”右边的表达式的类型转换成“=”右边的变量的类型,例如 int a=4.5; a的值实际是4! 混合运算:就是一个运算表达式当中包含了多个类型,这时候就需要有类型转换。当运算符两边的操作数类型不同时,其中一个操作数就要经过类型转换以和另一个操作数的类型相一致,然后才能进行运算。原创 2016-06-03 09:38:49 · 488 阅读 · 0 评论 -
C语言中内存分配
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请转载 2015-12-10 11:38:45 · 300 阅读 · 0 评论 -
内存分配
/*1 编写一个业务函数,实现字符串(前后各有三个空格,单词前后也均有空格)" i am student, you are teacher " ,各个单词首字符大写,结果如下" I Am Student, You Are Teacher " ,要求1:实现所有接口 70要求2:写出测试程序 30*/#define _CRT_SECURE_NO_WARNINGS原创 2015-12-10 12:10:41 · 294 阅读 · 0 评论 -
二维数组名的本质是数组指针
#includeint main(){ int a[10] = {};//a是数组首元素的地址 int *p = a;//步长为4 int(*q)[10] = &a;//步长为4*10 int num[4][10] = {};//num 也是数组首元素的地址 int index = 1; for (int i = 0; i < 4; i++) { for (int j =原创 2015-12-30 10:00:01 · 1399 阅读 · 0 评论 -
数组做函数参数退化为指针
#include "stdio.h"#include "stdlib.h"#include "string.h"void printfArray(int *a){ int i = 0; for (i=0; i<10; i++) { printf("%d ", a[i]); }}//1.数组做函数参数,会退化为指针void printfArray2(int *a, in原创 2015-12-31 10:25:18 · 765 阅读 · 0 评论 -
如何避免野指针
#include#include#includechar **createTwoDemsionArray(int count){ if (count > 1000) { return NULL; } char **p = (char**)malloc(count * sizeof(char*)); for (int i = 0; i < count; i++) { p原创 2016-01-03 17:25:07 · 442 阅读 · 0 评论 -
C 字符串拷贝
#include#includeint str_cpy(char *destination, const char*source){ if (destination == NULL || source == NULL) { return -1; } for (; *source != '\0'; ) { *destination++ = *source++; } *d原创 2016-01-08 10:08:06 · 525 阅读 · 0 评论 -
二级指针作形参
#include #include #include char ** sortArray(char **p,int num1,char (*q)[30],int num2){ char **res = (char**)malloc((num1 + num2)*sizeof(char*)); for (int i = 0; i < num1 + num2; i++) { res[原创 2016-01-10 19:12:46 · 585 阅读 · 0 评论 -
接口的封装与使用
接口的封装#include #include #include typedef struct _SCK_HANDLE{ char version[16]; char serverIP[16]; int port; char *pBuf; int iBuflen;}SCK_HANDLE;//客户端初始化环境__declspec(dllexport)int cltSo原创 2016-01-10 21:08:59 · 526 阅读 · 0 评论 -
计算结构体偏移量
内核源码#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#include "stdlib.h"#include "stdio.h"#include "string.h"struct AdvTeacher{ char name[64]; int age; char *p;};#d原创 2016-01-11 23:47:13 · 433 阅读 · 0 评论 -
三级指针打造自己的二维数组
#include #include #include int getMemory(char ***myPointer,int num,int dem){ char **tmp = (char**)(malloc)(num*sizeof(char*)); for (int i = 0; i < num; i++) { tmp[i] = (char*)malloc(dem * si原创 2016-02-11 16:03:49 · 1073 阅读 · 0 评论 -
C 读写文件
//读文件的代码int main(int arg, char *args[]){ if (arg return 0; int fd = open(args[1], O_RDONLY); //只读方式打开文件abc.txt if (fd == -1) { printf("error is %s\n", stre原创 2015-12-01 23:17:13 · 420 阅读 · 0 评论 -
fstat & stat 使用
//得到文件状态代码int main(int arg, char *args[]){ int fd = open(args[1], O_RDONLY); if (fd == -1) { printf("error is %s\n", strerror(errno)); }else { printf("success fd = %d\n", fd); struct sta原创 2016-01-13 23:01:54 · 834 阅读 · 0 评论 -
getpass使用
不回显的情况下读取用户输入的字符串char *getpass( const char *prompt);原创 2016-01-13 23:03:46 · 950 阅读 · 0 评论 -
c 文本文件拷贝
#define _CRT_SECURE_NO_WARNINGS#include#include#includevoid readFile(const char *fileName, const char *mode){ FILE *fp = fopen(fileName, mode); if (NULL == fp) { printf("open failed\n");原创 2016-02-16 10:30:34 · 413 阅读 · 0 评论 -
自动变量与非自动变量
自动变量 局部变量,如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中。这种变量叫自动变量。这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的,所以也叫自动变量。一般情况下,不作专门说明的局部变量,均是自动变量。自动变量也可用关键字auto作出说明。例如:(考虑到浏览器可能给作者本意要写在同一行的转载 2015-10-14 20:40:15 · 1116 阅读 · 0 评论