c语言
文章平均质量分 71
satellite13
这个作者很懒,什么都没留下…
展开
-
const和static的用法
关于const: 这一点在很多经典的关于C 和C++的书籍中是必谈的要点。在《Exceptional C++》一书中,对这点有很精彩的描述,现摘录如下:“没有正确的安全意识的枪手在世界上是不可能活的很长的。const 观念不正确的程序员也是一样和没有时间戴紧帽子的正确,没有时间检查带电电线的电工一样不会活的很长。”在C 语言中,const 修饰符表示告诉编译器此函数将不会改变被修饰的变量原创 2016-01-29 09:58:08 · 717 阅读 · 0 评论 -
Linux的system()和popen()差异
Linux的system()和popen()差异1. system()和popen()简介在linux中我们可以通过system()来执行一个shell命令,popen()也是执行shell命令并且通过管道和shell命令进行通信。 system()、popen()给我们处理了fork、exec、waitpid等一系列的处理流程,让我们只需要关注最后的返回结果(函数的返回值)即可。原创 2016-05-16 10:17:35 · 2552 阅读 · 0 评论 -
Linux下system与popen函数
Linux下使用system()函数一定要谨慎linux尽量避免使用system。曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么转载 2016-09-13 14:43:03 · 8489 阅读 · 1 评论 -
sizeof与strlen的区别(总结)
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是运算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如: short f();printf("%d原创 2016-09-13 16:31:25 · 1714 阅读 · 0 评论 -
通过shell命令提取文件内容(C实现)
一、需求说明 项目中需要提取/etc/fh_version文件中的软件版本号,该文件的内容如下:[root@FiberHome]cat /etc/fh_versionFH_DEVICE_TYPE="LG522"FH_SOFTWARE_VER="L04Y1.03M00"FH_HARDWARE_VER="V1.0"FH_OPERATOR=CM 需要提取出上原创 2016-09-13 15:04:55 · 2337 阅读 · 0 评论 -
linux获取系统信息(sysinfo函数的使用)
sysinfo结构体Linux中,可以用sysinfo来获取系统相关信息。Linux中,sysinfo是用来获取系统相关信息的结构体。函数声明和原型:#include int sysinfo(struct sysinfo *info);结构体信息:在Linux 2.3.16中,结构体的信息是(单位是字节): struct sysinfo {转载 2016-08-12 08:58:05 · 14362 阅读 · 0 评论 -
c语言:读取文件中的指定内容
项目中要求从wifi的状态文件中提取出rssi字段的值,还有一个前提条件:必须与hwaddr(手机的MAC地址)一一对应。wifi状态文件sta_info如下:# cat /proc/wlan0-vap0/sta_info-- STA info table -- (active: 1) 1: stat_info... state: 405 AuthAlgrthm: 0原创 2016-08-24 18:50:56 · 12472 阅读 · 1 评论 -
fopen自动创建文件失败(文件路径检查创建)
一、问题描述 fopen函数使用过程发现,当fopen要打开的文件路径中,包含一个不存在路径时,不管fopen函数的第二参数设成什么,都无法建立该文件。如下:char *filename = "/usr/local/ct/mirror_im_protocol.cfg";FILE *fp = NULL;if ((fp=fopen(filename,"a"))==NU原创 2016-08-26 14:22:02 · 44025 阅读 · 2 评论 -
轻量级嵌入式web服务器 --libhttpd
一、嵌入式web服务器 在网上找了很多关于嵌入式web server的资料,比如shttpd、appweb、boa、go ahead、server等等, 但都有网友反映移植不方便、资源要求高等等。如果用于运行ucLinux的arm9上,就没有什么问题,而用于运行ucOS的arm7上,则有很多限制,需要进行很多的移植工作,今天找到一个叫做LibHttpd的,采用ANSIC编写,仅从原创 2016-09-23 14:49:40 · 6317 阅读 · 0 评论 -
一种初始化结构体数组的方法
typedef struct { int requestNumber; void (*dispatchFunction) (Parcel &p, struct RequestInfo *pRI); int(*responseFunction) (Parcel &p, void *response, size_t responselen);} CommandInfo;原创 2016-10-13 09:46:39 · 7642 阅读 · 0 评论 -
c语言,可变参数函数实现
一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的实际参数。但在某些情况下我们希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数。典型的可变参数函数的例子有printf()、scanf()等,下面我就开始讲解。先看代码代码如下:printf(“hello,world!”);其参数个数为1个。printf(“a=%d,b=原创 2016-10-13 13:51:08 · 752 阅读 · 0 评论 -
C语言,结构体中字符串的声明(采用字符指针还是字符数组)
结构体中,字符串选项是用字符数组表示好,还是用字符指针表示好?typedef struct person{ char *name; int age; char sex[6];}; 该结构体中name用的是指针而不是数组,所以需要给字符串在堆上申请内存然后再赋值;sex字符串用的是字符数组,因此可以给其赋值; 用字符指针的优势是:字...原创 2016-10-13 15:28:21 · 13400 阅读 · 2 评论 -
switch case后接枚举(用于判断字符串常量)
c/c++ 语言不允许后面直接接字符串。c/c++ 语言case后面只允是整型、常量或表达式,例如:int k=3;switch(k){ case 'd'-'a': printf("d-a\n"); break; case 4 : printf("4\n"); break原创 2016-10-13 18:01:35 · 13755 阅读 · 1 评论 -
typedef char * pStr的问题和const char*, char const*, char*const的区别
下面的代码中编译器会报一个错误,你知道是哪个语句错了吗? typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 是p2++出错了。这个问题提醒我们转载 2016-12-01 15:43:41 · 1043 阅读 · 0 评论 -
C语言中的__FILE__、__LINE__和#line(用于打印当前函数及行数)
C语言中的__FILE__用以指示本行语句所在源文件的文件名,举例如下(test.c):#include int main(){printf("%s\n",__FILE__);}在gcc编译生成a.out,执行后输出结果为:test.c在windows的vc6.0下编译执行结果为:c:\documents and settings\administr转载 2017-03-22 08:57:44 · 25089 阅读 · 0 评论 -
signal函数的应用(linux)
1. 功能设置某一信号的对应动作2. 声明#include typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);3. 参数说明 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。 第二转载 2017-08-25 10:00:58 · 749 阅读 · 0 评论 -
system函数返回(如何判断调用的shell命令是否执行成功)
例:status = system("./test.sh");1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值。2、如何正确判断test.sh是否正确执行?仅判断st原创 2017-08-23 12:53:53 · 7673 阅读 · 0 评论 -
linux 中解析命令行参数 (getopt_long实例)
getopt_long.c#include #include char *l_opt_arg; char* const short_options = "nsm:"; struct option long_options[] = { { "name", 0, NULL, 'n' }, { "surname", 0,原创 2017-09-11 15:38:12 · 1060 阅读 · 0 评论 -
C语言获取系统当前时间
函数名: time ()头文件:time.h函数原型:time_t time(time_t * timer) 功 能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从UTC(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。原创 2016-08-10 20:16:36 · 33326 阅读 · 1 评论 -
实现MAC地址转换成十六进制
实现将mac地址(如:"00:FF:0A:0C:06:03")转换成十六进制存储的00FF0A0C0603方法一:#include "stdio.h"#include "string.h" static unsigned char SwitchChar(char chStr){ if (chStr >= '0' && chStr <= '9') {原创 2016-08-30 17:57:37 · 41606 阅读 · 5 评论 -
c实现各种进制间转换
#include #include #include #include int main() { int i,v; char bs[33]; char b[33]; char hs[9]; char h[9]; char s[4]; char *e; // 十进制整数转二进制串; i=1024; ltoa(i,b,原创 2016-03-16 10:09:55 · 387 阅读 · 0 评论 -
C语言字符串函数大全
c库函数——字符串函数【C语言字符串函数大全】 char stpcpy(char*dest,const char *src) 将字符串src复制到destchar strcat(char*dest,const char *src) 将字符串src添加到dest末尾char strchr(cons转载 2016-03-17 10:00:41 · 350 阅读 · 0 评论 -
字符串拷贝与进制转换的简单应用
源码中需要将整数分成前后两个部分,可以用strncpy()函数来实现#include #include int main() { char str1[10]={0},str2[10]={0}; char temp[10]={0}; char *string="abcdefghi"; int i =12345678; sprintf(原创 2016-03-17 10:40:52 · 305 阅读 · 0 评论 -
windows下实现socket通信
原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊……下面我贴出来一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。【实际上我们需要完成的二进制流的传输,需要使用unsignedchar来实现,因为c里没有byte数据类型,这里我们不以byte为例,因为转载 2016-03-30 15:11:37 · 4449 阅读 · 0 评论 -
斜杠/和反斜杠\ 的区别
路径中使用斜杠/和反斜杠\的区别到底是什么。Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符。Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上的文件浏览器都是用 反斜杠\ 作为路径分隔符。随着发展,DOS系统已经被原创 2016-03-08 11:28:04 · 5554 阅读 · 0 评论 -
sprintf()函数的用法总结
sprintf()函数的程序用例:#include #includeint main(void){char buffer[80];sprintf(buffer, "An approximation of Pi is %f\n", M_PI);puts(buffer);return 0;} sprintf的作用是将一个格式化的字符串输出到一个原创 2016-01-07 12:57:00 · 57396 阅读 · 3 评论 -
配置文件键值对读写API函数实现
项目中开发了一种读写文件的函数,文件的存储格式为键值对形式(name = value),非常实用,特将源码记录如下:Conftool.h文件源码:/*** Copyright (c) 2012 OCS, Inc.**** Project: GPON-ONT-V2.0** File: conf_toolkit.h** Author: ychxie/xuzhe*原创 2016-02-29 16:09:27 · 1470 阅读 · 0 评论 -
C语言中static的作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable原创 2016-05-10 19:47:58 · 1979 阅读 · 0 评论 -
错误输出函数perror和strerror用法
头文件 #includestdio.h> 注意 不可以掉了这个头文件,perror是包含在stdio.h这个文件里的//定义函数 void perror(const char *s); 例如:perror ("open_port"); char* strerror(interrnum);函数说明 perror ( )用 来 将原创 2016-04-17 10:22:33 · 6692 阅读 · 0 评论 -
c语言中的break和continue
break和continue的区别如下:1. break可用于switch语句,表示跳出整个switch块,而continue则不能用于switch语句 ;2. 它们都可用于循环语句的循环体,所谓的区别也应该是它们对循环次数的影响不同。break用于立即退出当前循环,而continue仅跳过当次循环(本次循环体内不执行continue语句后的其它语句,但下次循环还会执行)。原创 2016-04-19 13:57:32 · 403 阅读 · 0 评论 -
堆,栈,内存泄露,内存溢出介绍
简单的可以理解为:heap(堆):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack(栈):是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结转载 2016-05-04 16:00:32 · 1696 阅读 · 0 评论 -
内存管理(malloc和free用法)
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!转载 2016-05-06 10:34:10 · 10269 阅读 · 0 评论 -
#ifdef和#endif用法
"#ifdef 语句1 程序2 #endif“ 可翻译为:如果宏定义了语句1则执行程序2。 作用:我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。 代码举例:新建define.cpp文件 #include "iostream.h" int main() { #ifdef DEBUG cout<< "Beginning ex原创 2016-05-09 13:42:41 · 5499 阅读 · 0 评论 -
C语言实现ping功能(查看设备联网状态)
gethostbyname()函数说明——用域名或主机名获取IP地址 包含头文件 #include #include 函数原型 struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。传出值,是一个hostent原创 2016-05-18 17:00:05 · 5221 阅读 · 1 评论 -
C语言sscanf() 用法举例
一、函数定义 sscanf() - 是C语言中从一个字符串中读进与指定格式相符的数据的函数。 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: ssc转载 2016-07-26 19:51:01 · 585 阅读 · 0 评论 -
C语言:用异或^实现数据加密
“^”的意思是:当两个操作数对应位不相同时结果的相应位即为一,否则为零。当然,这里的对应位是指二进制的位。1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0用“^”加密解密的原理:将需要加密的内容看做A,密钥看做B,A ^ B=加密后的内容C。而解密时只需要将C ^ 密钥B=原内容A。如果没有密钥,就不能解密!实例:原创 2016-08-04 19:50:49 · 16059 阅读 · 0 评论 -
C语言实现计算文件和字符串md5值
一、命令介绍 下面的源码md5.c,通过gcc编译后,就可得到一个md5的二进制命令,通过该命令可以计算某文件或字符串的md5值。 命令格式为: md5 -E [Encode Type] -S [Encode Source] 如:md5 -E file -S “tmp/img.bin””二、md5.c源文件:原创 2016-08-17 18:54:16 · 4809 阅读 · 1 评论 -
C语言strtok()函数:分割字符串(自己实现strtok)
头文件:#include 定义函数:char * strtok(char *s, const char *delim);函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s原创 2016-07-28 19:19:32 · 2829 阅读 · 1 评论