C
文章平均质量分 51
lamdoc
这个作者很懒,什么都没留下…
展开
-
str to hex 函数
程序中经常会用代 字符串转换成数字的功能:比如 str to hex, 代码实现如下:#include #include unsigned int strHex(char *str, char **end){ unsigned int hex = 0; // Accept leading 0x if (str[0] == '0' &原创 2013-01-31 16:54:37 · 1608 阅读 · 0 评论 -
atoi_atof_atol_strtod_strtol_strtoul
头文件#includestdlib.h>1. strtoul() ---把字符串转成无符号长整型定义函数unsigned long strtoul(const char *nptr,char **endptr,int base);函数说明:strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代原创 2013-05-28 10:50:50 · 377 阅读 · 0 评论 -
strtok()_strsep()
原型:char *strtok(char s[], const char *delim);功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。说明:strtok()用来将字符串分割成一个个片段。参数s指向欲分原创 2013-05-27 18:05:33 · 404 阅读 · 1 评论 -
popen()_pclose()
头文件: #include 函数定义:FILE * popen ( const char * command , const char * type );int pclose ( FILE * stream );popen() 函数通过创建一个管道,调用 fork 产生一个子进程,在shell中执行“command ”命令来开启一个进程。这个进程必须由 pclose() 函数原创 2013-05-27 17:36:43 · 526 阅读 · 0 评论 -
结构体中字符数组的赋值
包含字符数组的结构体的初始化:如一个包含着字符数组的结构体,定义如下typedef struct st_IGMInfo{ /* IGM name */ char Name[100]; /* Mac address */ unsigned char MAC[6]; /* IGM location */原创 2013-05-16 15:59:00 · 938 阅读 · 0 评论 -
#运算符和##运算符
#运算符出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。例如:#definePASTE(n)"adhfkj"#nmain(){printf("%s",PASTE(15));}宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15。##运算符##运算符用于把参数连接到一原创 2013-05-02 11:04:01 · 320 阅读 · 0 评论 -
printf 的宏定义版本
我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#def转载 2013-05-02 10:23:33 · 338 阅读 · 0 评论 -
分级printf log
1. 这是一种可以按重要性把printf分级输出的一个宏定义:#include #define LOG_DEBUG "DEBUG" #define LOG_TRACE "TRACE" #define LOG_ERROR "ERROR" #define LOG_INFO "INFOR" #define LOG_CRIT "CRTCL" #define转载 2013-05-02 11:09:57 · 466 阅读 · 0 评论 -
指针与数组的关系
指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是转载 2013-04-15 16:29:09 · 346 阅读 · 0 评论 -
fflush()
函数名: fflush()功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件 头文件:原型:int fflush(FILE *stream)返回值:fflush 的返回值类型是int类型,那么这个int类型具体的返回是什么呢?如果成功刷新,fflush返回0。指定的流没有缓冲区或者只读打开时也返回0值。返回EOF指出一个错误。注意:如果fflush返回原创 2013-04-15 13:45:34 · 382 阅读 · 0 评论 -
strchr()
原型:extern char *strchr(const char *s,char c);头文件:#include 功能:查找字符串s中首次出现字符c的位置说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。返回值:Returns the address of the first occurrence of the character in the strin原创 2013-05-28 09:26:07 · 321 阅读 · 0 评论 -
isalpha()_isupper()_islower()_isdigit()
1. isalpha() -- 测试字符是否英文字母原型:int isalpha(int ch)用法:头文件加入#include (C语言使用)功能:判断字符ch是否为英文字母,当ch为英文字母a-z或A-Z时,在标准c中相当于使用“isupper(ch)||islower(ch)”做测试,返回非零值(不一定是1),否则返回零。例子:#include#includeint原创 2013-05-27 16:52:21 · 448 阅读 · 0 评论 -
编译器升级引起的printk error
老版本的编译器,下面的代码不会报错:#ifdef DEBUG#define dprintk(x...) printk("----------:" ##x )#else#define dprintk(x...)#endif系统升级后,编译器升级了,就会报错了,修改方法是,把两个#号去掉。#ifdef DEBUG#define dprintk(x...) printk原创 2013-07-01 18:00:01 · 491 阅读 · 0 评论 -
地址只是一个指针
地址只是一个指针,指向一个location的意思.64位系统 地址用64bit表示。32位系统 地址用32bit表示。指向的内容的大小,要根据指向数据结构的类型而定:如指向一个char型,那就是1个字节大小。如指向一个int型,就是4个字节大小。如指向一个结构体,就是该结构体大小。如,一般访问一个地址的值比如0x00001000, 都会使用一个数据类型去访问,没有数据类原创 2013-01-31 15:13:33 · 277 阅读 · 0 评论 -
do...while(false)的作用
经常在函数中见到 do {...}while(false);一直挺纳闷,为什么会有这样的代码。现在想明白一点,这样做中间可以用break来跳出循环,从而达到goto的作用,因为goto有诸多弊端,应尽量避免。原创 2013-12-10 09:09:32 · 686 阅读 · 1 评论 -
nanosleep()
函数原型int nanosleep(const struct timespec *req, struct timespec *rem);d.h头文件#include 参数形式struct timespec{time_t tv_sec; /* seconds */long tv_nsec; /* nanoseconds */};功能这个函数功能是暂停某原创 2013-09-22 10:37:13 · 589 阅读 · 0 评论 -
for循环中有多个限制结束条件的正确写法
正确写法应该是:for(i=a,j=b; id; i++,j--){....}我以前都是把多个条件用逗号分隔开写。for(i=a,j=b;id; i++,j--){....}一直没有什么问题。但是今天我做了一个题,一直找不出来错误,我单步调试,最后终于被我发现,就是这种写法错了。原来,我之前的写法其实是逗号运算符, id 结果就是j>d的结果~~要想限制原创 2013-09-25 13:20:46 · 2033 阅读 · 1 评论 -
getopt()和getopt32()
getopt()和getopt32()这两个函数, 都是用来就是用来分析命令行参数的函数。1. getopt()在继续讨论getopt 之前,先要明确两个概念:选项(option) 和 选项参数(argument)。如下例子:gcc -g -lm foo.c -o foo -g 中的 g,-o 中的 o 还有 -lm 中的 l 就是选项,而 -lm 中的 m 就是 l原创 2013-09-24 11:47:49 · 960 阅读 · 1 评论 -
open函数
static void wpa_supplicant_fd_workaround(void){#ifdef __linux__ int s, i; /* When started from pcmcia-cs scripts, wpa_supplicant might start with * fd 0, 1, and 2 closed. Th原创 2012-06-25 11:40:49 · 305 阅读 · 0 评论 -
C语言内存地址基础
从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。逆向引用某个指针,将会得到数组中该索引所指向的值。这一切当然都是谎言。操作系统对内存的管理要远比这复杂。内存不转载 2013-08-06 16:46:51 · 437 阅读 · 0 评论 -
srand()_rand()_random()
1.srand()srand()是随机数发生器的初始化函数, 就是给rand()提供种子seed 如果srand每次输入的种子数值是一样的,那么每次运行产生的随机数也是一样的。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复, 常常使用系统时间来初始化,即使用 time函数来获得系统时间,结合时间函数,使得每次种子不相同,即可产生不同的随机数原创 2013-07-23 11:53:49 · 456 阅读 · 0 评论 -
代码中直接访问寄存器: *(volatile unsigned short *)的含义
*(volatile unsigned short *)0x20000000 的意义volatile 表示 禁止编译器优化.unsigned short * 的意思是定义一个2个字节的地址指针, 连起来就是在0x20000000地址位置上输出一个2个字节长的数据。( unsigned short * )是声明了一个 指针,指针本身就是数值,unsigned short *p原创 2013-07-04 16:56:53 · 949 阅读 · 1 评论 -
fileno(FILE)
函数原型:int fileno( FILE *stream );函数功能:fileno()用来取得参数stream指定的文件流所使用的文件描述符返回值:某个数据流的文件描述符头文件:stdio.h相关函数:open,fopen,fclose例子:#include int main( void ){ printf( "The file descripto原创 2013-04-15 13:59:33 · 397 阅读 · 0 评论 -
字符串转换函数集锦
字 符 串 转 换abs字符串到ASCII转换dec2hex十进制数到十六进制字符串转换fprintf把格式化的文本写到文件中或显示屏上hex2dec十六进制字符串转换成十进制数hex2num十六进制字符串转换成IEEE浮点数原创 2013-04-07 19:12:46 · 411 阅读 · 0 评论 -
printf、sprintf与fprintf 的用法区分
1: fprintf()#include int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如 char name[20] = "Mary"; FILE转载 2013-04-07 19:10:29 · 340 阅读 · 0 评论 -
一个非常好用的printf输出宏
#define STRING(x) #x#define OUT_PUT(a) printf("xxha: ---------- %s = %d\n", STRING(a), a);需要输出变量i 时,只需要OUT_PUT(i) 就行了。原创 2012-06-21 11:12:08 · 390 阅读 · 0 评论 -
snprintf
snprintf 是一个具有拷贝,剪辑字符串的函数,功能很强大。 int snprintf(char *str, size_t size, const char *format, ...); 函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值原创 2012-06-21 11:09:37 · 268 阅读 · 0 评论 -
结构体_位段
1.什么是位段在前面各章中, 我们已经讨论过字节概念了。在大多数的计算机系统中, 一个字节是由八个更小的, 称作为位的单位组成的。位是比字节更小的单位。位只有两个值, 1 或 0 。因此, 存储在计算机存储器中的一个字节可以看成由八个二进制数字形成的串。例如, 一个存放值 36 的字节是八个二进制数字的串: 可以表示成 00100100。 存入值24 的字节可以表示成 0001原创 2012-06-21 11:26:06 · 262 阅读 · 0 评论 -
指针赋值 int *p = arr
1. 例子:int i, arr[10], *p=arr;分开来就是:int i;int arr[10];int *p = arr;这里int *p = arr; 相当于:int *p;p = arr;也就是说赋值的时候*p只代表它是一个指针变量,而p=arr才是它的赋值语句. 初始化里面的*号表示这个变量是指针类型int *a,则a是(int *)类型,原创 2012-06-21 11:24:04 · 1431 阅读 · 0 评论 -
一次写一系列 i2c 寄存器操作
1. 写一系列寄存器操作:lc1120_write_regs(codec, lc1120_init_data, ARRAY_SIZE(lc1120_init_data)2. 数据结构定义和数据内容: typedef struct lc1120_i2c_data { unsigned char nreg; //寄存器地址 unsi原创 2012-06-21 11:14:17 · 535 阅读 · 0 评论 -
printf()、sprintf()、vprintf()、vsprintf()
一、printf()printf()函数优点在于可以格式化输出!printf()是一个函数,输出字符串,而print是一个语言结构,总是返回true(1),而echo也是语言结构,返回无效。$total = 12.4如果用echo时,是这样:echo "Total amount is $total.";输出:Total amount is 12.4.换回printf则为原创 2012-06-21 11:11:02 · 412 阅读 · 0 评论 -
extern 用法
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗?原创 2012-06-21 11:26:55 · 242 阅读 · 0 评论 -
结构体成员的引用
有下面几个结构体:struct SIMPLE { int a; char b; float c;}; //SIMPLE是个结构标签struct SIMPLE x;struct SIMPLE y[20], *z;或者typedef struct { int a; char b; float c;}Simple;原创 2012-06-21 11:22:09 · 772 阅读 · 0 评论 -
fgets()函数
fgets函数: 从流中读一行或指定个字符, 原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。 形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针 例:原创 2012-06-21 11:18:00 · 322 阅读 · 0 评论 -
strchr()函数
原型:extern char *strchr(const char *s,char c); 头文件:#include 功能:查找字符串s中首次出现字符c的位置 说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。 举例1: #include #include int main(void) { char string[17];原创 2012-06-21 11:16:49 · 230 阅读 · 0 评论 -
ASC_to_hex and hex_to_ASC
1. #define ASCTOHEX(C) (((C)>'9')? ((C)-0x37):((C)&0x0f)) //ASC to hex16进制 与 ASCII码 转换。 2.//--------------------------------------------------------------------------//convert c[] to two byte原创 2012-06-21 11:19:42 · 689 阅读 · 0 评论 -
C open read write file
#include #include double d[10] = { 1.3, 1.7, 1.23, 1.9, 0.97, 1.5, 7.4, 0.0, 1.01, 8.75};int main(void){ int i; FILE *fp; if((fp = fopen("my.txt", "wb")) == NULL) { printf("Canno原创 2012-06-21 11:20:41 · 463 阅读 · 0 评论 -
BSS段_数据段_代码段_堆_栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用原创 2012-08-17 15:50:22 · 578 阅读 · 0 评论 -
一段小清新的宏定义使用
这段代码是 __skb_clone函数的定义:/* * You should not add any new code to this function. Add it to * __copy_skb_header above instead. */static struct sk_buff *__skb_clone(struct sk_buff *n, struct s原创 2013-01-21 16:30:24 · 373 阅读 · 0 评论 -
ntohs()_ntohl()_htons()_htonl() 这几个函数的作用
看如下代码:#include int main(void){ int i = 0x12345678; int y = 0; //先看看各种数据类型的大小 printf("sizeof int = %d \n", sizeof(int)); printf("sizeof short int = %d \n"原创 2013-01-21 11:21:37 · 527 阅读 · 0 评论