memset函数使用详解

memset函数使用详解
memset函数使用详解

memset函数使用详解

今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a,

MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.

更详细的解说见百度百科--> https://www.360docs.net/doc/038381131.html,/view/982208.htm

1。void *memset(void *s,int c,size_t n)

总的作用:将已开辟内存空间s 的首n 个字节的值设为值c。

2。例子

#include

void main(){

char *s="Golden Global View";

clrscr();

memset(s,'G',6);

printf("%s",s);

getchar();

return 0;

}

3。memset() 函数常用于内存空间初始化。如:

char str[100];

memset(str,0,100);

4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));

memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。

strcpy就只能拷贝字符串了,它遇到'/0'就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘/0’之前)是否超过50位,如超过,则会造成b 的内存地址溢出。

5.补充:一点心得

memset可以方便的清空一个结构类型的变量或数组。

如:

struct sample_struct

{

char csName[16];

int iSeq;

int iType;

};

对于变量

struct sample_strcut stTest;

一般情况下,清空stTest的方法:

stTest.csName[0]='/0';

stTest.iSeq=0;

stTest.iType=0;

用memset就非常方便:

memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:

struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);

6。strcpy

原型:extern char *strcpy(char *dest,char *src);

用法:#i nclude

功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

memcpy

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

用法:#i nclude

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

memset

原型:extern void *memset(void *buffer, int c, int count);

用法:#i nclude

功能:把buffer所指内存区域的前count个字节设置成字符c。

说明:返回指向buffer的指针。

memset函数使用详解

memset函数使用详解 今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值. 更详细的解说见百度百科--> https://www.360docs.net/doc/038381131.html,/view/982208.htm 1。void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间s 的首n 个字节的值设为值c。 2。例子 #include void main(){ char *s="Golden Global View"; clrscr(); memset(s,'G',6); printf("%s",s); getchar(); return 0; } 3。memset() 函数常用于内存空间初始化。如: char str[100]; memset(str,0,100); 4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a)); memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。 strcpy就只能拷贝字符串了,它遇到'/0'就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘/0’之前)是否超过50位,如超过,则会造成b 的内存地址溢出。 5.补充:一点心得 memset可以方便的清空一个结构类型的变量或数组。 如:

C语言函数手册(DOC)

一、字符测试函数 isupper()测试字符是否为大写英文字 ispunct()测试字符是否为标点符号或特殊符号isspace()测试字符是否为空格字符 isprint()测试字符是否为可打印字符 islower()测试字符是否为小写字母 isgraphis()测试字符是否为可打印字符 isdigit()测试字符是否为阿拉伯数字 iscntrl()测试字符是否为ASCII码的控制字符isascii()测试字符是否为ASCII码字符 isalpha()测试字符是否为英文字母 isalnum()测试字符是否为英文或数字 isxdigit()测试字符是否为16进制数字 二、字符串操作函数 strtok()字符串分割函数 strstr()字符串查找函数 strspn()字符查找函数 strrchr()定位字符串中最后出现的指定字符 strpbrk()定位字符串中第一个出现的指定字符strncpy()复制字符串 strncat()字符串连接函数 strncasecmp()字符串比较函数(忽略大小写) strlen()字符串长度计算函数 strdup()复制字符串 strcspn()查找字符串 strcpy()复制字符串 strcoll()字符串比较函数(按字符排列次序) strcmp()字符串比较函数(比较字符串) strchr()字符串查找函数(返回首次出现字符的位置) strcat()连接字符串 strcasecmp()字符串比较函数(忽略大小写比较字符串) rindex()字符串查找函数(返回最后一次出现的位置) index()字符串查找函数(返回首次出现的位置) toupper()字符串转换函数(小写转大写) tolower()字符串转换函数(大写转小写) toascii()将整数转换成合法的ASCII码字符 strtoul()将字符串转换成无符号长整型数

C语言函数大全

C语言函数大全 1 字符测试函数 函数(及意义)函数分解Isalnum(){判断字符是否is alphbet(字母表) number(数字) 为字母或数字} Isalpha(){判断是否为英文is alphbet(字母表) 字母} Isblank(){空格和TAB} is blank(空格) Iscntrl() { 控制} is control(控制) Isdigit(){数字} is digit(数字) Isgraph(){除空格外的可打is graph(图表) 印字符} Islower(){是否为小写} is lowercase(小写) Isprintf(){可打印字符含空这个简单 字符} Ispunct(){标点或特殊符号is punctuation(标点) } Isspace(){检查是否为空字is space(空间) 符,即判断是否为空格,水平 定位字符“\t”,归位字符“\r ”,垂直定位字符“\v”,换行 字符“\n”,翻页“\f”} Isupper(){是否为大写字母is upper_case(大写) } Isxdigit(){十六进制} is hexadecimal digit(十六进制) Tolower(){将小写转换成 大写} Toupper(){将大写转换成这个简单(to change 或者to covert 或者 小写} transformation

字符串函数 Memchr(){在某一内存范围内查找一特定字符}Memory (储存)char(字符型炭)也可以是character (字符) Memcmp(){比较区域 str1,str2的前n个字节} Memory(同理)compare(比较) Memcpy(){由str2所指内存区域复 制n个字节到str1所指内存区域} Memory copy(复制) Memmove(){两个所指的内存区域 可重叠,但是内容会更改,函数 返回值为指向区域内存的指针} Memory move(移动) Memset(){把str所指的内存区域 的前N个字节设置成字符c} Set(设置)

ZeroMemory、memset和 “={0}” 的区别

ZeroMemory,是美国微软公司的软件开发包SDK中的一个宏。其作用,是用0来填充一块内存区域。 void ZeroMemory( PVOID Destination,SIZE_T Length ); Destination :指向一块准备用0来填充的内存区域的开始地址。 Length :准备用0来填充的内存区域的大小,按字节来计算。ZeroMemory只是将指定的内存块清零。使用结构前清零,而不让结构的成员数值具有不确定性,是一个好的编程习惯。 为了避免优化编译器的意外的影响,请使用SecureZeroMemory函数。这个函数被定义为RtlZeroMemory宏。更新信息,请查看Winbase.h与Winnt.h 这两个头文件。 ZeroMemory和memset的区别: 1、ZeroMemory是微软的SDK提供的,memset是属于C Run-time Library 提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。 2、ZeroMemory是一个宏,只是用于把一段内存的内容置零,内部其实是用 memset实现的,而memset除了对内存进行清零操作,还可以将内存置成别的字符。 3、如果程序是Win32程序而且不想连接c运行时库,就用ZeroMemory;如果需要跨平台,就用memset。 所以,如果ZeroMemory和memset用于清零操作,其本质是一样的。ZeroMemory和“={0}”的区别: 1、ZeroMemory会将结构中所有字节置0,而“={0}”只会将成员置0,其中填充字节不变。 2、一个struct有构造函数或虚函数时,ZeroMemory可以编译通过,而“={0}”会产生编译错误。其中,“={0}”的编译错误起到了一定的保护作用,因为对一个有虚函数的对象使用ZeroMemory时,会将其虚函数的指针置0,这是非常危险的(调用虚函数时,空指针很可能引起程序崩溃)。 示例代码 struct SPerson {char c;float s;}; class CTestVirtual

常用系统函数

附录B 常用系统函数 在使用C++语言进行编程时,许多很基本和很重要的功能都由系统的库函数和类库来实现。为便于学习和使用,本附录列出了一些常用的库函数,供读者查阅。 本附录的依据是Windows环境下VC十+编译系统。由于不同编译系统提供的库函数和类库可能会稍有差异,读者在实际使用时应参考所使用系统的手册。 为方便查阅,本附录的内容基本按函数类型分类,不同的分类中的内容可能会有重叠。对每一个函数,包含对其名称、原型、参数的含义、所需头文件、返回值和函数的功能的简洁说明。凡是函数名称以下划线开头的(如_open)都是Microsoft特殊函数,只适合在Windows 9x和WinNT平台上使用。其它函数均为ANSI标准函数,在任何平台下都能使用。 为节约篇幅,考虑到本书的读者大多为C十+语言的初学者,本附录只收录了一些常用的函数。对一些功能相同的函数,省略了其宽字符和多字节字符的版本,读者若需要查阅这方面的内容,可参考相应的资料。 B.1 缓冲区操作函数 函数名:_memccpy 函数原型:void *_memccpy(void *dest,const void *src,int c,unsigned int count); 参数:dest目的指针;sro源指针;c拷贝的最后字符;count字符个数。 所需头文件: 功能:从src所指向的地址开始拷贝。个或多个字节到dest中。当指定字符c已拷贝或已拷贝count个字节后停止。 返回值:如果字符c被拷贝,返回dest中该字符直接后继字节的指针;如果c没有被拷贝则返回NULL。 函数名:memchr 函数原型:void *memchr(const void *buf,int c,sizet count); 参数:buf缓冲区的指针;c查找的字符;count检查的字符个数。 所需头文件: 功能:查找buf的前count个字节中c的第一次出现,当找到c或已检查完count个字节时停止。 返回值:如果成功,返回buf中c首次出现的位置的指针;否则返回NULL 函数名:memcpy 函数原型:void *memcpy(void *dest,const void *src,sizet count); 参数:dest目的缓冲区;src源缓冲区;count拷贝的字符个数。 所需头文件: 功能:从sro拷贝count个字节到dest。如果源缓冲区和目的缓冲区重叠,这个函数不能保证正确拷贝;对于这种情况可使用memmove处理。 返回值:返回dest的值。 函数名:_memlcmp 函数原型:int _memicmp(const void *buf1,const void *buf2,unsigned int count);

C常用经典算法及其实现

常用算法经典代码(C++版) 一、快速排序 void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中 {int h=x,r=y; int m=a[(x+y)>>1]; //取中间的那个位置的值 while(hm) r--; //比中间那个位置的值大,循环直到找一个比中间那个值小的if(h<=r) {int temp=a[h];//如果此时h<=r,交换a[h]和a[r] a[h]=a[r]; a[r]=temp; h++;r--; //这两句必不可少哦 } } if(r>x) qsort(x,r);//注意此处,尾指针跑到前半部分了 if(h

{for(int i=1;i=1;j--) //相邻的两两比较 if(a[j]>a; tong[a]++;}//相应的桶号计数器加1 for(int i=1;i<=cmax;i++) {if(tong[i]>0) //当桶中装的树大于0,说明i出现过tong[i]次,否则没出现过i while (tong[i]!=0) {tong[i]--; cout<

字符串处理函数大全

字符串处理函数大全 bcmp(比较内存内容)相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件;include 定义函数;int bcmp ( const void *s1,const void * s2,int n); 函数说明;bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。返回值;若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值。 附加说明;建议使用memcmp()取代。 范例:参考memcmp()。 //================================================================ bcopy(拷贝内存内容)相关函数 memccpy,memcpy,memmove,strcpy,ctrncpy 表头文件;#include 定义函数;void bcopy ( const void *src,void *dest ,int n); 函数说明;bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。 返回值 ;附加说明建议使用memcpy()取代 范例 #include main() { char dest[30]=”string(a)”; char src[30]=”string\0string”; int i; bcopy(src,dest,30);/* src指针放在前*/ printf(bcopy(): “) for(i=0;i<30;i++) printf(“%c”,dest[i]); memcpy(dest src,30); /*dest指针放在钱*/ printf(…\nmemcpy() : “); for(i=0;i<30;i++) printf(“%c”,dest[i]); 执行 bcopy() : string string memcpy() :string sring //================================================================ bzero(将一段内存内容全清为零)相关函数 memset,swab 表头文件;#include 定义函数;void bzero(void *s,int n); 函数说明:bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当于调用memset((void*)s,0,size_tn); 返回值:附加说明建议使用memset取代

代码模版(全)

// Shell. #include"types.h" #include"user.h" #include"fcntl.h" // Parsed command representation #define EXEC1 #define REDIR2 #define PIPE3 #define LIST4 #define BACK5 #define MAXARGS10 struct cmd { int type; }; struct execcmd { int type; char *argv[MAXARGS]; char *eargv[MAXARGS]; }; struct redircmd { int type; struct cmd *cmd; char *file; char *efile; int mode; int fd; }; struct pipecmd { int type; struct cmd *left; struct cmd *right; }; struct listcmd { int type; struct cmd *left; struct cmd *right; };

struct backcmd { int type; struct cmd *cmd; }; int fork1(void); // Fork but panics on failure. void panic(char*); struct cmd *parsecmd(char*); // Execute cmd. Never returns. void runcmd(struct cmd *cmd) { int p[2]; struct backcmd *bcmd; struct execcmd *ecmd; struct listcmd *lcmd; struct pipecmd *pcmd; struct redircmd *rcmd; if(cmd == 0) exit(); switch(cmd->type){ default: panic("runcmd"); case EXEC: ecmd = (struct execcmd*)cmd; if(ecmd->argv[0] == 0) exit(); exec(ecmd->argv[0], ecmd->argv); printf(2, "exec %s failed\n", ecmd- >argv[0]); break; case REDIR: rcmd = (struct redircmd*)cmd; close(rcmd->fd); if(open(rcmd->file, rcmd->mode) < 0){ printf(2, "open %s failed\n", rcmd- >file); exit(); }

c 语言学习笔记01

1. c 语言 1.1.1.helloworld 文件名:test_pointer.c 文件内容: #include #include int main() { printf("hello world\n\n"); return 0; } 编译加运行: [root@localhost c_study]# gcc test_pointer.c ;./a.out hello world 1.1. 2.获取键盘输入 文件名:getKeyboardInptStr.c 文件内容: #include #include int main() { char *a= malloc(sizeof(char *)); char *b= malloc(sizeof(char *)); scanf("%s",a); scanf("%s",b); printf("%s \t%s\n",a,b); free(a); free(b); return 0; } 编译: gcc getKeyboardInptStr.c -o hello.exe 运行

[root@localhost tcp_ip]# ./hello.exe abc ddd abc ddd [root@localhost tcp_ip]# 1.1. 2.1.从键盘输入构造数组 文件名keyboard_input.c 文件内容: #include #include int main() { char * strs[4]; char *a; int i; for(i=0;i<4;i++){ a= malloc(sizeof(char *)); scanf("%s",a); strs[i]=a; //printf("%s \t\n",a); //free(a); } printf("=====================================\n"); for(i=0;i<4;i++){ printf("%s \t\n",strs[i]); } return 0; } 1.1.3.读取文件 读取文件有两个操作:打开流(fopen)和关闭流(fclose)#include #include #include int main(int ac,char**av)

不当使用memset函数带来的麻烦问题

不当使用memset函数带来的麻烦问题 通常在C的编程中,我们经常使用memset函数将一块连续的内存区域清零或设置为其它指定的值,最近在移植一段java代码到C++的时候,不当使用memset函数花费了我几个小时的调试时间。考试大提示: 对于虚函数的底层机制很多资料都有较详细阐述,这次的调试感触颇深。 先来看一段代码,在继承的类Advance之中,有很多属性字段,Examda希望将其清成0或NULL,于是在构造函数中Examda通过memset将当前类的所有属性置0。 class Base{ public: virtual void kickoff() = 0; }; class Advance:public Base{ public: Advance(){ memset(this, 0, sizeof(Advance)); } void kickoff(){ count++; //... do something else; } private: int attr1, attr2; char* label; int count; //... other attributes, they should be initiated to 0 or NULL at beginning. }; int _tmain(int argc, _TCHAR* argv[]) { Base* ptr = new Advance(); ptr->kickoff(); return 0; } 这样看似能正常运行,但运行程序时,你会发现类似于下面的错误: TestVirtual.exe 中的0x00415390 处未处理的异常: 0xC0000005: 读取位置0x00000000 时发生访问冲突 同时断点停留在ptr->kickoff()处,从错误提示我们可以得知无法调用kickoff方法,这个方法的指针没有被正确初始化,但为什么呢? 指出问题之前,先看看这段文献上的关于虚函数机制的说明: 函数赖以生存的底层机制:vptr + vtable。虚函数的运行时实现采用了VPTR/VTBL的形式,这项技术的基础: ①编译器在后台为每个包含虚函数的类产生一个静态函数指针数组(虚函数表),在这个类或者它的基类中定义的每一个虚函数都有一个相应的函数指针。 ②每个包含虚函数的类的每一个实例包含一个不可见的数据成员vptr(虚函数指针),

C语言m开头函数大全(新手必看)

C语言函数大全(m开头) main()主函数 每一C程序都必须有一main()函数, 可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放在哪个地方, 以下几点说明都是适合的。 1.main()参数 在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。 * argc: 整数, 为传给main()的命令行参数个数。 * argv: 字符串数组。 在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0 以下的版本, argv[0]为空串("") 。 argv[1] 为在DOS命令行中执行程序名后的第一个字符串; argv[2] 为执行程序名后的第二个字符串; ... argv[argc]为NULL。 *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符

串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C: \TURBOC(对于PATH) 或YES(对于87)。 Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中 说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序 的局部变量。 请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下 的例子: main() main(int argc) main(int argc, char *argv[]) main(int argc, char *argv[], char *env[]) 其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不 用argv[]的情况。 以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数: /*program name EXAMPLE.EXE*/

sqc基础库使用手册

SqcLib库接口定义 新的sqc基础库采用c++封装,开发人员只需要从基础类Db2Tools派生自己的业务类。然后重载基础类的busiLogic方法,就可以完成自己业务逻辑处理。具体的处理流程为: 1、在基础类Db2Tools的run方法中完成对具体应用参数的解析。 2、run方法调用busiLogic方法,完成具体的业务逻辑 3、busiLogic方法中调用基础类的常用数据库访问方法,完成对数据库的操作。 4、在基础类的数据库访问方法中,除完成指定的数据库操作外,同时完成日志输出和相关事务控制。[日志的输出目录为profile文件中定义的AGENTTRACEDIR目录,如果没有定义,取默认路径] 1函数列表 1.1数据库类(Db2Tools) 该类有两个主要功能: 1、实现数据库访问 2、完成对具体业务逻辑调用和事务控制 ●connDb 函数原形:int connDb(const char *m_para_conn) 用途:连接数据库 参数:m_para_conn:数据库名dbname 返回:1.输入的数据库参数不对 2.密码参数环境变量设置错误 3.数据库连接失败 0.数据库连接成功 ●busiLogic 函数原形:int busiLogic(void) 用途:业务逻辑入口 参数: 返回: ●run 函数原形:int run(int argc,char *argv[]) 用途:实例开始入口 参数:argc:参数个数

Argv:参数数组 (通常取main函数入口参数) 返回:0:成功,其它:失败 ●db2RunstatTab 函数原形:int db2RunstatTab(char *tabname,char *file,int line) 用途:对表做runstats 参数:tabname:输入需要runstats的表名,schema.tabname或者tabname(schema默认为用户名) 返回:-1:失败 0:成功 ●db2Insert 函数原形:int db2Insert(char *sqlstr,char *tabname,char *file,int line) 用途:提交insert语句 参数: sqlstr:insert sql语句 file: line: 返回:-1:失败 0:成功 ●db2Update 函数原形:int db2Update(char *sqlstr,char *tabname,char *file,int line) 用途:提交update语句 参数: sqlstr:update sql语句 file: line: 返回:-1:失败 0:成功 ●db2Delete 函数原形:int db2Delete(char *sqlstr,char *tabname,char *file,int line) 用途:提交delete语句 参数: sqlstr:delete sql语句 file: line: 返回:-1.失败 0.成功 ●db2DropTab 函数原形:int db2DropTab(char *tabname,char *file,int line) 用途:删除表 参数: tabname:需要删除的表名,schema.tabname file:

C常用操作函数

C++常用操作函数载入动态库 bool LoadDll() { HttpDownDll = LoadLibrary("HTTPDOWNDLL.dll"); if(HttpDownDll == NULL) { MessageBox(0, "载入动ˉ态库a错洙误ó!", "错洙误ó", MB_OK|MB_ICONWARNING); FreeLibrary(HttpDownDll); return false; } SendCommand = (SendCommandFunc)GetProcAddress(HttpDownDll, "SendCommand"); if(SendCommand == NULL) { MessageBox(0, "GetProcAddress错洙误ó!", "错洙误ó", MB_OK|MB_ICONWARNING); FreeLibrary(HttpDownDll); return false; } return true;

} 卸载动态库 bool FreeDll() { FreeLibrary(HttpDownDll); SendCommand = NULL; return true; } 字符串分割 std::vector split(std::string str,std::string pattern) { std::string::size_type pos; std::vector result; str+=pattern;//扩展1字符串以方便操ù作痢 int size=str.size(); for(int i=0; i

标准库字符串函数(超详细)

C语言字符串处理的库函数 使用C语言字符串处理的库函数,务必包含头文件string.h,即#include 1、比较字符串大小函数 1)忽略大小写---strcasecmp 函数原型:int strcasecmp (const char *s1, const char *s2); 函数说明:用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异 2)忽略大小写—stricmp 函数原型:int stricmp(char *str1, char *str2); 函数说明:以大小写不敏感方式比较两个串 3)不忽略大小写—strcmp 函数原型:int strcmp(char*str1,char*str2); 函数说明:通过比较字串中各个字符的ASCII码,来比较参数Str1和Str2字符串,比较时考虑字符的大小写。4)比较一部分—strncmpi 函数原型:int strncmpi(char *str1, char *str2, unsigned maxlen); 函数说明:比较字符串str1和str2的前maxlen个字符 5)内存区域比较---memcmp 函数原型:int memcmp(void*buf1,void *buf2,unsigned int count) 函数说明:比较内存区域buf1和buf2的前count个字节。Void*是指任何类型的指针。 6)内存区域部分比较-- memicmp Void*是指任何类型的指针。 函数原型:int memicmp(void*buf1,void *buf2,unsigned int count) 函数说明:比较内存区域buf1和buf2的前count个字节,但不区分大小写。 以上比较函数的返回值:若参数1中字符串和参数中2字符串相同则返回0; 若参数1中字符串长度大于参数2中字符串长度则返回大于0 的值; 若参数1中字符串长度小于参数2中字符串长度则返回小于0的值。 2、从字符串中提取子串 1)提取子串--strstr 函数原型:char* strstr(char*src,char*find) 函数说明:从字符串src中寻找find第一次出现的位置(不比较结束符NULL) 返回值:返回指向第一次出现find位置的指针,如果没有找到则返回NULL 2)提取分隔符间字串—strtok 函数原型:char *strtok(char*src,char*delim); 函数说明:分解字符串诶一组标记串,src为要分解的字符串,delim为分隔符字符串。 首次调用时,src必须指向要分解的字符串,随后调用要把s设成NULL; strtok中src中查找包含在delim中的字符,并用NULL(’\0’)来替换直到找遍整个字符串。 返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。 举例: #include #include

常见系统函数

1.//*********************************************************************** char* reverse(char* Array) { int len = strlen(Array); for(int i=0;i

MTK task 简单总结(速成版)

MTK task 小结1 MTK 的基本执行单元是task, 从操作系统的角度来理解,task 有些像线程而不是进程,进程之间的地址空间是相互隔离的,说白点就是进程之间的全局变量是不相互干扰的。而线程之间则是用同一个地址空间,MTK的task之间的地址空间也是共同的,也就是说在MTK 编程里,定义了一个全局变量,那么在任何一个task里面都能引用,(这里只是举个例子,在实际编程过程中最好不要用全局变量,实在没有办法避开,那么全局变量也要分模块化,进行封装)。所以说,MTK 的task 更像线程, MTK 用的是实时操作系统nucleus,是非抢占式操作系统,也就是当高优先级的task 在运行时,低优先级的task是得不到运行时间的,除非等高优先级的task 因为种种原因挂起。MTK 还有一个跟task 想关的概念叫module,它跟task 之间的关系是:一个task 可以对应多个module。task 主要表示是一个执行单元,module 主要是用于传递消息,在MTK 中,消息传递是module 为单位src_mod – > des_mod,而不是以task为单位。 MTK task 小结2 虽然MTK手机,是feature phone(功能机),不像symbian 6 那样可以同时运行多个应用。但是MTK还是由许多task组成。平时MTK的后台播放MP3就是由一个task 完成的。具体以后分析。现在来看看MTK 最主要的task,MMI task,MTK的应用程序都是在该task里面运行,它有一整套开发MTK应用的framework。 先来看创建MMI task的函数 kal_bool mmi_create(comptask_handler_struct **handle) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ static comptask_handler_struct mmi_handler_info = { MMI_task, /* task entry function */ MMI_Init, /* task initialization function */ NULL, NULL, /* task reset handler */ NULL, /* task termination handler */ }; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ *handle = &mmi_handler_info; return KAL_TRUE; }这个函数的结构,是MTK 创建task的基本结构,系统初始化时,会调用该函数。看里面的结构体 typedef struct { kal_task_func_ptr comp_entry_func; //task 的入口函数 task_init_func_ptr comp_init_func; //task 的初始化函数 task_cfg_func_ptr comp_cfg_func; //task 的配置函数

C语言中常用函数大全

(一)输入输出常用函数 1,printf (1)有符号int %[-][+][0][width][.precision][l][h] d -:左对齐 +:正数前加‘+’ 0:右对齐,acwidth.precision,按实际输出,否者左边补零 (2)无符号int %[-][#][0][width][.precision][l][h] u|o|x|X #:”%o %x/X”输出0,0x,0X .precision:同上,TC/BC包含0x/X,VC下不包含 (3)实数输出 %[-][+][#][0][width][.precision][l][L] f|e|E|g|G #:必须输出小数点 .precision:小数位数(四舍五入) (4)字符和字符串的输出 %[-][0][width] c %[-][0][width] [.precision] s .precision:S的前precision位 2,scanf %[*][width] [l][h]Type With:指定输入数据的宽度,遇空格、Tab、\n结束 *:抑制符scanf(“%2d%*2d%3d”,&num1,&num2) 输入123456789\n;num1==12,num2==567. 注意: (1)指定width时,读取相应width位,但按需赋值 Scanf(“%3c%3c”,&ch1,&ch2)输入a bc d efg ch1==a ch2==d (2)%c 输入单字符时“空格、转义字符”均是有效字符 (二)ascll字符/字符串/文件函数 1;字符非格式化输入函数 (1)int getchar(void) 接受字符,以回车结束,回显 (2)int getc(FILE*stream) 从stream中接受字符,以回车结束,回显stream=stdin时,(1)==(2)(3)int getche(void) 直接读取字符,回显conio.h

相关主题
相关文档
最新文档