姜源Jerry
万物伊始,效率本源。大道至简,代码之禅。
展开
-
【C接口】备份内容到文件、从备份文件读取内容接口
C接口:1、备份内容到文件接口2、从备份文件读取内容接口#备份内容int backup_bind_info (char *path, char *content){ int fd = 0; fd = open (path, O_WRONLY|O_CREAT|O_TRUNC, 0775); if (fd < 0) { printf ("open (...原创 2018-05-08 21:31:13 · 354 阅读 · 0 评论 -
【C程序】使用bit位来做计数标志的程序
https://github.com/janycode/myGitCode/blob/master/my_mark_program/bit_test.c/* * 使用bit位作为掩码来实现计数累加,和对计数累加的判断,限制计数是limit=100 */#include #include #define MASK_BIT(val, bit) ((val)[((bit) / 3原创 2017-09-01 21:14:19 · 817 阅读 · 0 评论 -
【C程序】字符串拆分子串传入传出接口函数×2
/* 优点:效率高,纯指针操作 */#include #include #include #define LEN 10static int split_string (char *src_str, char dest_str[][LEN]){ int index = 0; char *ph = src_str; char *p = src_str; if(!src_st原创 2017-08-14 22:44:33 · 447 阅读 · 0 评论 -
【调试技巧】一种针对正在运行的进程中途写值快速调试的方法
// 程序接口运行上文#if 1 int test_fd = open ("/tmp/test_file", O_RDWR|O_CREAT); char test_buff[16] = {0}; int test_rs = 0; if (test_rs = read (test_fd, test_buff, sizeof (test_buff)) > 0) { /原创 2017-08-10 22:42:01 · 428 阅读 · 0 评论 -
《C和指针》全书"警告与编程提示"总结笔记
全书18章:1-6章:快速上手、基本概念、数据、语句、操作符和表达式、指针7-12章:函数、数组、字符串和字节、结构和联合、动态内存分配、结构和指针13-18章:高级指针、预处理器、输入和输出函数、标准函数库、抽象数据类型、运行时环境>>第1章丶快速上手头文件 stdlib.h 中定义了 EXIT_SUCCESS 和 EXIT_FAILURE 符号。EXIT_SUC原创 2017-07-29 22:26:47 · 508 阅读 · 0 评论 -
【C程序】逻辑判断真假话问题:3人说真话,1人说假话
/* ** 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手为4个嫌疑犯中的一个。4个嫌疑犯的供词如下:** A说: 不是我。** B说: 是C。** C说: 是D。** D说: C在胡说。** 已知3个人说了真话,1个人说的是假话。根据这些信息,通过程序确定说假话的凶手。**/#include int main(int argc, char *a原创 2017-07-16 11:25:18 · 12358 阅读 · 1 评论 -
【经典】C语言字符串函数原型
strlen / strcmp / strcat / strcpy / memset / strstr / atoi / itoa //** 代码演示 -strlen.c **/ size_t mystrlen2 (char *s) // 内核{ char *p = s; while (*p) p++; return p - s;}/** 代码演示 -原创 2017-04-06 09:31:22 · 1648 阅读 · 0 评论 -
字符数组循环右移:1道面试题的流水解法
void str_offset (char *src, int n) { /* 代码实现,字符数组循环右移,比如n=2 */ }"abcdefghi >> hiabcdefg" // n=2,字符数组偏移2个字符,实现循环右移效果#include #include #include void str_offset (char *src, int n){ int len原创 2017-05-04 23:02:53 · 920 阅读 · 0 评论 -
字符串倒序:指针参数传递动态内存方式
#include #include #include #include /* * 函数介绍:字符串倒序 * 输入参数:@p 字符串首地址 * 输出参数:@q 使用动态内存排序后字符串首地址 * 返回值:true/成功,false/失败 */bool reverse (char *p, char **q) // 必须用二级指针接收 q 自身的地址作为传出参数{ if (N原创 2017-04-30 17:07:59 · 571 阅读 · 0 评论 -
以任意进制形式打印输出,如六进制
#include //#define NUM_TYPE 6 @编译时指定int main (void) { unsigned int n = 0, y = 0, res = 0; unsigned int cnt = 1; printf ("请输入一个非负数:"); scanf ("%d", &n); while (1) { y = n原创 2017-03-19 17:55:30 · 538 阅读 · 0 评论 -
【C程序】popen获取系统命令的输出内容
#include <stdio.h>#include <string.h>#include <stdlib.h>int main (void){ int ssh_cnt = 0; char cmd[256] = {0}; int status = 0; FILE* fp = NULL; scanf ("%d", &...原创 2018-05-02 22:07:35 · 2081 阅读 · 0 评论 -
【C接口】遍历目录找到文件并备份到指定位置
有时候会遇到很多备份的开发功能,所以就需要先要找到需要备份的文件或者目录,然后再备份到指定目录。涉及点:1、打开目录;2、遍历目录中的文件;int data_get_file_and_backup_it(char * filename){ char cmd[256] = {0}; int rc = 0; int i = 0; DIR * dirptr = NUL...原创 2018-05-09 20:38:01 · 425 阅读 · 0 评论 -
【C函数】sysinfo获取系统相关信息
Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息。头文件:#include <sys/sysinfo.h>函数声明:int sysinfo(struct sysinfo *info);功能:用来获取系统相关信息的结构体参数:@info 结构体变量地址返回值:0 - 操作成功;-1 - 操作错误,errno被设置结构体信息(linux2.2.16):stru...原创 2018-06-01 20:53:08 · 6240 阅读 · 0 评论 -
【C程序】JSON库怎么用,json.h全解
头文件:#include "json/json.h" // 当前目录下使用:char *str = "{\"abc\": 123, \"wds\": 12.3, \"qwe\": \"ddd\", \"bool0\": false, \"bool1\": true, \"arr\";编译注意:需要加上 -ljson 库。1.声明jso原创 2018-05-31 21:39:27 · 12056 阅读 · 2 评论 -
【C程序】timer_create怎么用?定时器使用例子
#include <unistd.h>#include <stdio.h>#include <signal.h>#include <time.h>#define TRUE (1)void testTimerSign();void SignHandler(int iSignNo);void printTime();int main()...原创 2018-05-24 21:45:29 · 3581 阅读 · 0 评论 -
【C程序】timer_create系列定时器函数
linux下timer_t定时器的使用,总共有3个函数。timer_create() timer_settime() timer_gettime()头文件:#include <signal.h>#include <time.h>函数声明:int timer_create(clockid_t clockid, struct sigevent *sevp, timer_t...原创 2018-05-28 21:57:05 · 22127 阅读 · 2 评论 -
【C程序】从路径中截取文件名的方法×2
从路径中截取文件名的两种方法:#include "stdio.h"#include "string.h"int main(void){ char fn[30],*p; char pathname[80]="e:\\1\\2\\abc.dat"; //上句假设以某种方式获得的全文件名在pathname中,"..."中只是举例 strcpy(fn,(p=strrch...原创 2018-05-23 20:34:26 · 8099 阅读 · 0 评论 -
【C程序】微妙随机数,更低碰撞率
遇到一个需要生成5位随机数的需求,而且要求低碰撞率,如果用秒级的随机数可能不能满足需求,因此使用了微秒级的随机数。#单个随机值unsigned char get_random_value (int *second){ char digit = 0; int number = 0; srand((unsigned int)*second); number = ...原创 2018-05-15 19:35:36 · 735 阅读 · 0 评论 -
【C程序】用宏实现链表的基本接口
LIST(type, name) // 声明一个表结构体LINK(type, link) // 声明一个链表结构体LIST_INIT(list) // 初始化一个表LINK_INIT(link) // 初始化一个链表LIST_HEAD(list.head) // 表头指针LIST_TAIL(list.tail) // 表尾指针LIST_CNT(list.cnt) // 节点数LIST_REMOVE...原创 2018-05-21 21:44:03 · 1052 阅读 · 0 评论 -
【C接口】快速拷贝文件内容
经常遇到需要拷贝文件内容的时候,反复造轮子不如直接用轮子。int copy_file(int read_fd, int write_fd){ char buf[64] = {0}; int length = 0; int pos = 0; int ret = 0; while((length = READ(read_fd, buf, sizeof(buf...原创 2018-05-14 21:52:36 · 636 阅读 · 0 评论 -
【C程序】获取文件最后一次修改时间
获取文件的最后一次修改时间,用于判断可能的使用场景:1、文件是否被修改了2、新的内容是否写入文件了3、对比时间来找到最后被修改的文件等等...#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int get_old_file_tim...原创 2018-05-11 20:53:13 · 12596 阅读 · 2 评论 -
【C接口】快速获取文件大小属性
unsigned long oem_fota_get_file_size(const char *path){ unsigned long filesize = -1; FILE *fp; fp = FOPEN(path, "r"); if(fp == NULL) { LOG_INFO(OEM_LOG_ERROR, "open :%s FAI...原创 2018-05-04 21:15:28 · 788 阅读 · 0 评论 -
【C程序】#define宏定义中实现循环遍历查找数组元素
#include <stdio.h>#define GET_LINE while(getchar() != '\n');#define FIND_VALUE(j, arr) \({ \ int i = 0, rc = 0; \ for (; i < sizeof(arr)/sizeof((arr)[0]); i++) { \ if (arr[...原创 2018-05-03 18:58:32 · 4854 阅读 · 1 评论 -
使用Quicker.em在SourceInsight中快捷编程的方法
Quicker.em下载【设置步骤】1、将Quicker.em放到Source Insight 4.0\Projects\Base\目录下;2、Source Insight 4.0中设置Options >> Key Assignments... >> Macro: AutoExpand快捷键为Alt+Enter(个人习惯);3、编码时可输入以下“快捷字符串”后按下快捷键(如...原创 2018-04-25 22:29:48 · 2841 阅读 · 0 评论 -
TAB键转换为4个空格
#include int isCharTab (char tab) { return (('\t' == tab) ? 1 : 0); }int isStrTab (char* tab) { return (('\\' == *tab && 't' == *(tab+1)) ? 1 : 0); }void fill4Space (char* pDst) { int原创 2017-03-19 17:48:12 · 1901 阅读 · 0 评论 -
15:文件操作(C标准库函数)fopen/fclose/fread/fwrite/fseek/fprintf/fscanf
【文件操作】所有的文件都是"采用二进制的方式记录"数据如果文件里所有二进制数据都有对应的字符(ASCII码),就把这种文件叫做"文本文件"除了文本文件之外的所有文件都叫做"二进制文件"文本文件和二进制文件各自采用不同的方法操作("可以把文本文件当作二进制文件来操作",能够操作二进制文件就也同时可以操作文本文件,但反过来不行)文件操作基本步骤:1. 打开文件:"fopen()原创 2017-01-14 20:33:04 · 1460 阅读 · 0 评论 -
个人备用:C语言学习阶段每周1练
C语言编程中知识点典型练习题:① 1-100之间的素数。(双重循环即可)② 键盘得到非负数,统计各数位出现的次数。(数组)③ 生成7位数的彩票(1-35之间),且不重复。(双重循环)④ 函数方法打印九九乘法表。(函数调用)⑤ 函数方法模拟扫雷游戏,雷X,空O,统计周边雷数量。(函数调用)⑥ 键盘得到多个成绩,写入字符串,逗号连接,再拆分求和。(字符串、指针)⑦原创 2016-10-15 21:30:51 · 620 阅读 · 0 评论 -
C语言指针定义全解
#include int main(){ int p; //整形变量p int *p; //一个指向整形数的指针p int **p; //一个指向整形数的地址的二级指针p int *p[3]; //一个包含有3个元素的指针数组p int (*p)[3]; //一个指向具有3个整型元素的一维数组的指针p int *func(int, int); //一个返回整形数地址的函数原创 2016-12-03 21:33:05 · 728 阅读 · 0 评论 -
10:变量作用域、指针
【变量的作用域】程序中一个变量只能被某些语句使用,这些语句叫做这个变量的作用域声明在函数里面的变量叫做/* 局部变量 */,局部变量的作用域包含函数里面的所有语句声明在所有函数外边的变量叫做/* 全局变量 */,全局变量的作用域包含程序里的所有语句没有初始化的全局变量自动被初始化为 0 全局变量和局部变量可以重名,这个变量名称优先代表局部变量如果全局变量和局部变量都可以满足原创 2016-12-10 22:47:23 · 593 阅读 · 0 评论 -
11:字符串、字符数组、字符指针数组
【字符串】1. C语言里所有文字信息必须记录在一组连续的字符类型存储区里2. 所有文字信息必须以'\0'字符做结尾,这个字符的ASCII码就是数字 0 符合以上这两个特征的内容就可以用来在C语言程序中代表文字信息他们叫做"字符串"字符串里'\0'字符前面的是有效字符所有的字符串都可以用"字符类型指针"表示"字符串字面值",用两个双引号中间包含的一组字符表示,例如原创 2016-12-10 22:55:33 · 1010 阅读 · 0 评论 -
12:预处理指令、宏定义、条件编译、多文件编程
【预处理指令】"#define" 预处理指令可以用来定义宏 #define PI 3.14f宏可以用来给数字起名字定义宏的时候要把名称写在前面,把它代表的数字写在后面宏名称通常由大写英文字母构成宏名称里不可以包含空格用宏给数字起名字的时候,不要使用赋值操作符编译器会把程序中的所有宏名称替换成它所代表的数字,然后再进行处理命令行-$:"gcc -DPI=3.14f原创 2016-12-10 23:01:17 · 905 阅读 · 0 评论 -
05:for循环、break和continue、while、do-while、二重循环
l 循环语句循环语句可以让一组语句反复多次运行。for 关键词循环。 for循环中可以让一个变量依次代表一组数字,使用同样一组语句处理数字。采用如下结构描述for循环变量的变化过程: for(表达式①;表达式②;表达式③) { 语句④(循环体);}表达式①:赋值表达式,给控制变量赋初始值(从几开始)表达式②:关系/逻辑表达式,循...原创 2016-09-23 22:09:58 · 561 阅读 · 0 评论 -
08:变量的作用域、初识指针
l 变量的作用域C语言里的变量只能被一组特定的词语使用,这组词语叫做变量的作用域。声明在函数内部的变量叫做局部变量,它的作用域是函数内部的所有语句。声明在所有函数的外边的变量叫做全局变量,它的作用域包括程序中所有的语句。简言之: 局部变量,即auto自动变量,使用完后会被系统回收,作用域在{ 语句块 }内。 全局变量,即外部变量,作用域在整个文件原创 2016-10-15 23:16:03 · 448 阅读 · 0 评论 -
09:函数、递归和递推
【练习】模拟 windows 系统下的扫雷游戏,在 10 x 10 的地图中随机布雷 10 个;若是雷的地方用 X 表示;不是雷的地方用 O 表示;在周围有雷的格子里标记周围雷的数量。二维数组的组下标和组内下标分别表示坐标的 x 和 y ,随机数方式循环布雷找到雷,在周围八个格子里进行依次 +1 操作/*代码*/#include #include #includ原创 2016-11-12 10:33:50 · 506 阅读 · 0 评论 -
06:缓冲区、一维数组
| 缓冲区在不同速度的设备之间传递数据需要使用缓冲区。scanf函数工作时需要使用一个叫做输入缓冲区的缓冲区。用户在键盘上输入的内容首先进入缓冲区,程序从输入缓冲区里获得数字。先进入缓冲区里的数字必须首先处理。如果用户输入的格式和程序要求的不一致,则会导致从这个数据开始的所有数组都无法处理。可以使用下面2条语句,把输入缓冲区里的错误的数据丢弃: scan原创 2016-09-23 22:17:05 · 698 阅读 · 0 评论 -
07:可变长数组、多维数组
【练习】打印一个7组数字的彩票,每个数字范围01-36之间,且不能重复;让用户输入7组同范围的数字,输出用户猜对了几个数,几等奖。双重循环实现验重,双重循环实现验证中奖/*代码*/#include #include #include int main(){ srand(time(0)); int i = 0, j = 0; int lot[7原创 2016-09-23 22:24:03 · 595 阅读 · 0 评论 -
04:运算符、分支语句if-else和switch-case
l 自增运算符自增(++)和自减(--)都是单目操作符,只能和存储区配合使用,均有两种表达方法: ++i; (前操作:先运算,后取值) num = ++i; → num = i + 1;然后i自增1 i++; (后操作:先取值,后运算) num = i++; → num = i;然后i自增1不要在一条语句中对同一个变量多次自增原创 2016-09-23 22:07:08 · 757 阅读 · 0 评论 -
02:C语言概述、vi编辑器、编写第一个C程序、变量的基本使用
l C语言概述C语言程序的绝大部分文件应以 .c为扩展名,这种文件叫做C语言源文件。C语言程序中还包括以 .h作为扩展名的文件,这种文件叫做C语言头文件。C语言程序中可以直接使用数字和加减乘除符号(+ - * /)。C语言程序中每个计算步骤最后都必须以 ; 结尾,以此结尾的计算步骤叫做一个语句。C语言程序中绝大多数语句都需要写在 { } 大括号里面,函数内部的语言一定按原创 2016-09-23 21:53:42 · 1304 阅读 · 0 评论 -
C++:继承、派生、多继承、补充:匈牙利命名法
一、继承/派生1. 作用:继承的目的是"延用旧功能",派生的目的是"增加新功能"。人类:属性(名字,年龄) 行为(吃,睡)教师:属性(名字,年龄,薪水)行为(吃,睡,教学)学生:属性(名字,年龄,成绩)行为(吃,睡,学习)class Human {name, age, void eat(), void sleep();};class Teacher原创 2017-02-02 23:10:00 · 410 阅读 · 0 评论 -
C++:特殊运算符的重载star、小括号、TYPE自定义类型、new和delete
一、特殊运算符的重载1. 取值运算符:* "指针解引用运算符"1)作用:让一个对象模拟指针的行为2)重载方式:成员函数方式class A {B & operator * (void) const {...}};友元函数方式class A {friend B & operator * (const A & rhs) {...}};/** 代码演示原创 2017-02-02 22:28:51 · 839 阅读 · 0 评论