
C Demo
该专栏主要为使用C语言实现一些功能,在实际开发中可能会用到一些模块,可以把需要的做成自己的函数然后调用,也可以在此基础上做自己的二次封装。最原始的代码来源于网络,大多数的正确性在Linux系统下均已验证,,
zxy131072
嵌入式linux
展开
-
C实现itoa函数的的一种方式
#include <stdio.h>#include <string.h>#include <stdlib.h>void my_toupper(char * str){ while(*str != '\0') { if((*str >= 'a') && (*str <= 'z')) *str += 'A' - 'a'; str++; } retur原创 2020-09-27 16:19:50 · 256 阅读 · 0 评论 -
选择法和插入法排序框架
#include <stdio.h>#include <stdlib.h>/*-------------------- 排序规则 -------------------- 它的工作原理是每一次从待排序的数据元素中选出 最小(或最大)的一个元素,存放在序列的起始位 置,直到全部待排序的数据元素排完。 稳定性:选择排序是不稳定的排序方法 如:[5,5,3]-------------------------------------------------*/原创 2020-09-23 11:38:11 · 178 阅读 · 0 评论 -
C中strlen函数寄存器内实现
#include <stdio.h>int main(int argc, const char *argv[]){ char *str = "87a8dfs4dsfdjskl\ afdsjklsadfjkl;kjassfdjklasdfkl\ djfffffffffffffffffffffffffdfdj\ dfjasdddddddddddddddddddddddddd\ djas;lkeafidjfdkadsjadfsfd原创 2020-09-23 11:37:59 · 144 阅读 · 0 评论 -
C实现椭圆效果
#include <stdio.h>#include <math.h>#define N 2.6int main(){ float x; float y; float r = 20; int i; for (x = -r; x <= r; x++) { y = sqrt(r*r - x*x) * N; for (i = 0; i < r*N - y; i++) putchar(' '); for (i = 0; i < y原创 2020-09-23 11:37:41 · 498 阅读 · 0 评论 -
C实现统计字符串含有的字母的个数
#include <stdio.h>#define N (1024)#define DIGIT 'd'#define UPER 'U'#define LOWER 'L'#define DEBUG 0int state = 0;int max = 0;int count = 0;int get_data(char *dest, int num){ char ch; int原创 2020-09-22 09:49:26 · 1084 阅读 · 0 评论 -
C实现打印特殊图形
#include <stdio.h>#include <math.h>#define BC '.'#define FC '0'void show_color_char(int ch, int fcolor, int bcolor){ fcolor %= 10; bcolor %= 10; /*background color is ignored */ printf("\e[1;3%dm%c\e[0m", fcolor, ch);// putchar(ch)原创 2020-09-22 09:31:04 · 297 阅读 · 0 评论 -
C实现单词的逆置
#include <stdio.h>#define BUFF_SIZE (1024)void swap(char *head, char *tail){ while (head < tail) { *head ^= *tail; *tail ^= *head; *head ++ ^= *tail --; }}int reverse_word(char *str){ char *head = str, *tail = str; whi原创 2020-09-22 09:27:45 · 1180 阅读 · 0 评论 -
C实现二维数组按照行排序
#include <stdio.h>//排序函数,分别对每一行的元素进行排序void sort_d_array(int (*a)[4], int row, int col){ int i,j,k,temp; for(i=0; i<row; i++) { for(k=0; k<col; k++) { for(j=0; j<col-k-1; j++) {原创 2020-09-22 09:23:55 · 3132 阅读 · 0 评论 -
C实现字符串排序操作
#include <stdio.h>#include <string.h>#define N 20void sort_data(char *const src,const unsigned int n){ int i,j; for(i = 0; i < n - 1; i ++) { for(j = 0; j < n - i - 1; j ++ ) { if(src[j] > src[j + 1]) { src[j] ^=原创 2020-09-21 13:16:35 · 1104 阅读 · 0 评论 -
C实现计算某个目录下的普通文件个数
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <dirent.h>#include <sys/types.h>int get_file_num(char* root){ int total = 0; DIR* dir = NULL; // 打开目录 dir = opendir(root); // 循环从目录中读文件 char path[1原创 2020-09-21 10:18:39 · 1270 阅读 · 0 评论 -
C实现打印菱形
#include <stdio.h>int main(int argc, const char *argv[]){ int i,j; int nu; puts("input your number:"); while(1 != scanf("%d",&nu)) getchar(); for(i = 0; i < nu; i ++) { for(j = nu - i; j > 0; j --) putchar('.'); for(j =原创 2020-09-13 20:53:04 · 127 阅读 · 0 评论 -
C实现三维数组排序
#include <stdio.h>int test01(){ int a2[2][10];//a2是一个二维数组,这个二维数组中包含两个一维数组,a2[0],a2[1],a2[0]和a2[1]两个数组是连续的 int index = 0; int i, j; for (i = 0; i < 2; i++) { for (j = 0; j < 10; j++) { a2[i][j] = index++; } }//遍历一个二维数组,把数组中每个成员原创 2020-09-11 09:03:10 · 1644 阅读 · 0 评论 -
C实现将处理特定字符串
#include <stdio.h>#include <string.h>int main(){ char a[100] = "12+5=;45-2=;34*2=;56/3="; char b[100] = { 0 }; char *s = strtok(a, ";"); while(s) { int i, j; char c; sscanf(s, "%d%c%d=", &i, &原创 2020-09-11 09:02:51 · 96 阅读 · 0 评论 -
C实现打印汉字点阵
#include <stdio.h>#include <stdlib.h>#define N 32int main(int argc, const char *argv[]){ int i,j; char ch[N * 4] = { /* 以下是 '我' 的 16点阵宋体 字模,32 byte */ 0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48, 0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,原创 2020-09-10 13:38:44 · 3811 阅读 · 0 评论 -
C实现将字符串数值转换成16进制
#include <stdio.h>#include <stdlib.h>char hex_char(unsigned int n ){ switch (n) { case 0: return '0'; case 1: return '1'; case 2: return '2'; case 3: return '3'; case 4: re原创 2020-09-10 13:38:34 · 1026 阅读 · 0 评论 -
C实现计算字符串中含有的汉字个数
#include <stdio.h>#include <stdlib.h>int main(int argc, const char *argv[]){// //验证*号是什么// int i;// for(i = 0; i < argc; i++)// printf("%s\n", argv[i]);// return 0; if (argc < 4) { fprintf(stde原创 2020-09-10 13:38:25 · 1737 阅读 · 0 评论 -
C中递归应用汉诺塔
#include <stdio.h>void hannuota(int n, char A, char B, char C){/* 如果是1个盘子 直接将A柱子上的盘子从A移到C 否则 先将A柱子上的n-1个盘子借助C移到B 直接将A柱子上的盘子从A移到C 最后将B柱子上的n-1个盘子借助A移到C*/ if (1 == n) { printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n", n, A, C); } else { hannuo原创 2020-09-10 13:37:49 · 90 阅读 · 0 评论 -
C中rand函数生成随机数
#include <stdio.h>#include <stdlib.h>#include <time.h>//计算机的时钟是不停改变的一个值//time函数是c语言的库函数,功能是得到系统当前时间int main(int argc, const char *argv[]){ int a; int i; time_t tm = time(NULL); //只要种子不同,rand产生的随机数就不同,如果种子一样,那么rand产生的随机数就一样原创 2020-09-09 14:07:38 · 428 阅读 · 0 评论 -
C实现打印指定范围内的素数
#include <stdio.h>#include <math.h>#include <stdlib.h>int main(int argc, const char *argv[]){ if(argc < 2) { fprintf(stderr, "Usage %s <number>\n", argv[0]); exit(1); } int num,i; for(num =原创 2020-09-09 13:52:54 · 452 阅读 · 0 评论 -
C实现atoi函数
#include <stdio.h>#include <stdlib.h>int mystrlen(const char *s){ int len = 0; while(s[len]) { len++; } return len;}int mypow10(int n)//得到10的n次方{ if (n == 0) return 1; if (n == 1) retu原创 2020-09-09 13:29:50 · 297 阅读 · 0 评论 -
C实现打印一个数组的最大数和第二大数
#include <stdio.h>int main(int argc, char *argv[]){ int a[] = {169, 22, 323, 515, 618, 297, 1596, 123, 59, 1674}; int i; int tmp = a[0];//默认数组中第一个成员就是最大的 for(i = 1; i < sizeof(a) / sizeof(a[0]); i++)//最大成员 { if (a[i]原创 2020-09-09 13:19:58 · 705 阅读 · 0 评论 -
C交换两个数的3种方法
#include <stdio.h>#include <stdlib.h>int swap_data(int method){ int x = 11; int y = 22; int tmp = -1; switch(method) { case 1: tmp = x; x = y; y = tmp;原创 2020-09-09 11:54:29 · 495 阅读 · 0 评论 -
C实现将4个char转换成一个int类型的方式
测试代码#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>int four_char_to_int(unsigned char a, unsigned char b, unsigned char c, unsigned char d){ unsigned int ret_val = 0; ret_val = d; ret原创 2020-09-09 09:31:07 · 2835 阅读 · 0 评论 -
一种字符型数据与浮点型数据的转换方式
使用联合体可以实现浮点型数据与字符型数据的数据共享,首先需要测试一下自己的系统的浮点型数据和字符型数据所占有的内存空间,然后分配一个同等大小的字符型数据的数组。由于两个变量的共享同一块内存空间,对浮点型数据的操作,实际上就是对字符型数组的操作,最后完成自己需要的转换。测试代码#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#define R2D原创 2020-09-09 09:22:44 · 747 阅读 · 0 评论 -
Linux 进程资源限制函数 getrlimit setrlimit
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>#include <sys/time.h>#include <sys/resource.h>void printf_linux_res(const char* n原创 2020-09-03 17:18:07 · 272 阅读 · 0 评论 -
Linux C中strftime()使用
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);功能:把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串。参数: char *s:存储转换格式的首地址 size_t max:s的最大值 const char *format:格式 const struct tm *tm:时间它可以用以下的符号对日期和时间进行格式化:%d 日期, 01-31%f原创 2020-09-03 16:13:25 · 761 阅读 · 0 评论 -
Linux C中 getspnam crypt函数使用
一定要使用root权限运行此程序编译时加上 -lcrypt 选项#include <stdio.h>#include <sys/types.h>#include <fcntl.h>#include <shadow.h>#include <unistd.h>#include <string.h>#include <crypt.h>#define _XOPEN_SOURCE int main(int a原创 2020-09-03 15:54:50 · 1532 阅读 · 2 评论 -
getgrnam和getgrgid函数得到用户组信息
#include <stdio.h>#include <sys/types.h>#include <sys/types.h>#include <grp.h>#include <unistd.h>#if 0 struct group { char *gr_name; /* group name */ char *gr_passwd; /* gr原创 2020-09-03 13:57:54 · 434 阅读 · 0 评论 -
C中字符向右查找实现截取内容
#include <stdio.h>#include <sys/types.h>#include <string.h>int trim_dots(const char * path){ char * pos = NULL; pos = strrchr(path, '/'); printf("%s\n", pos); if(pos == NULL) { perror("strrchr");原创 2020-09-03 13:41:33 · 365 阅读 · 0 评论 -
Linux C中获取用户属性函数
#include <stdio.h>#include <sys/types.h>#include <pwd.h>#if 0 struct passwd { char *pw_name; /* username */ char *pw_passwd; /* user password */ uid_t pw_uid; /* user ID */ gid_t pw_gid;原创 2020-09-02 17:48:42 · 129 阅读 · 0 评论 -
C的模型匹配函数glob
/* #include <glob.h> int glob(const char *pattern, int flags, int (*errfunc) (const char *epath, int eerrno), glob_t *pglob); void globfree(glob_t *pglob);功能:Linux文件系统中路径名称的模式匹配原创 2020-09-02 17:31:55 · 2929 阅读 · 0 评论 -
C实现快速创建一个大文件
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#define MAX_BUFF_SIZE (1024)int create_big原创 2020-09-02 16:55:40 · 828 阅读 · 0 评论 -
C实现删除指定的文本文件指定的一行
/* 删除文件的指定行 *///删除一个文件的注释#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <stddef.h>#include <errno.h>#define MAX_BUFF_SIZE (1024)int del_comment(void){ FILE *fp_原创 2020-09-02 16:26:37 · 3511 阅读 · 0 评论 -
C中字符类型数据测试
#include <stdio.h>int main(){ char ch = 'F'; ch = getchar(); int i,j; for(i = 0; i <= ch - 'A'; i ++) { for(j = 0; j < i ; j ++) putchar('_');#if 1 for(j = 0; j <= i; j ++) putchar(ch - j);#endif putchar(10); } retu原创 2020-08-27 13:50:25 · 165 阅读 · 0 评论 -
int类型转换成字符串类型
#include <stdio.h>#define BUFF_SIZE 1024int int2string(int value, char *buff);int main(int argc, const char *argv[]){ int value = -98765432; char buff[BUFF_SIZE]; int2string(value, buff); puts(buff); return 0;}int int2string(int val原创 2020-08-18 08:56:37 · 1506 阅读 · 0 评论 -
ip地址转换成int数值
测试代码#include <stdio.h>#define BUFF_SIZE 32#define IS_DIG(_ch_) (_ch_ >= '0' && _ch_ <= '9')#define IS_DOT(_ch_) ('.' == _ch_)int ip2int(const char *ipstr, int *ipbuff);int main(int argc, const char *argv[]){ char buff[BUFF_S原创 2020-08-18 08:56:24 · 755 阅读 · 0 评论 -
memcpy实现
测试代码#include <stdio.h>#define OPTIMIZE 0#if OPTIMIZEvoid *mymemcpy(void *dest, const void *src, int nbyte){ register int *d4 = dest; register const int *s4 = src; register char *d1; register const char *s1; register int n = nbyte >>原创 2020-08-18 08:56:11 · 297 阅读 · 0 评论 -
typeof的使用
测试代码#include <stdio.h>//#define IS_LOWER(CH) (CH >= 'a' && CH <= 'z')/* 定义一个和变量CH相同类型的临时变量_ch_,判断两者类型是否一致,不一致给出一个警告 */#define IS_LOWER(CH) ({\ typeof(CH) _ch_ = CH;\ _ch_ >= 'a' && _ch_ <= 'z';\ })int is_lower原创 2020-08-17 13:54:16 · 171 阅读 · 0 评论 -
数组合并并且排序
测试代码#include <stdio.h>int main(int argc, const char *argv[]){ int a[] = {2,3,6,7,10}; int b[] = {1,4,5,8,9}; int c[10]; int index_a = 0; int index_b = 0; int index_c = 0; for (; index_a < 5 && index_b < 5; index_c ++) { i原创 2020-08-17 13:46:07 · 401 阅读 · 0 评论 -
漂亮的正弦函数
测试代码#include <stdio.h>#include <math.h>#include <unistd.h>#define N 40int main(int argc, const char * argv[]){ float f; float ret; int i; for (f = 0.0; f < 6.28 * 10; f += 1.0 / N * 4) { ret = sin(f) + 1; for (i = 0;原创 2020-08-17 13:38:28 · 392 阅读 · 0 评论