1,程序运行时动态链接共享库;

libc(character),libm(math),使用标准库的函数;

eg:stdlib.h exit();

size_t数据类型,NULL空指针在头文件stddef.h define;

malloc,free stdlib.h

string.h strcat strcpy,strncpy;

程序按功能划分可分为数值运算,符号处理和I/O操作三类;

下面将测试使用相应的库函数做字符串初始化,取长度,拷贝,连接,搜索,比较;

1,  初始化字符串

#include <string.h>

void *memset(void *s,int c,size_t n);

  返回值:s指向那,返回的指针就指向那,

s指向内存地址,c为在需在内存中填充的值,通常c=0,n为要填充的字节数;

需要初始化字符串的应用环境

函数的局部变量,初值不确定,可以用memset(buf, 0, 10),char buf[10]清零,malloc分配的内存初值也是不确定的,也可以用memset清零;

全局变量或静态变量则会自动化清零(位于.bss段);

2,  取字符串长度

#include <string.h>
size_t strlen(const char *s);

  返回值:字符串的长度;

3,  内存字符串拷贝

#include <string.h>
void *memcpy(void *dest,const void *src,size_t n);
void *memmove(void *dest,const void *src,size_t n);
    返回值:dest指向那,返回指针就指向那;

memcpy函数从src所指向的内存地址拷贝n个字节到dest所指向的内存地址;

以str开头的函数(eg:strcat,strcpy,strncpy)处理以'\0'结尾的字符串,而以mem开头的函数(memcpy,memncpy)则不关心'\0'字符,或者说这些函数并
不把参数当字符串看待,因此参数的指针类型是void *而非char *。

memmove也是从src所指的内存地址拷贝n个字节到dest所指的内存地址,虽然叫move但其实也是拷贝而非移动。但是和memcpy有一点不同,memcpy的两个参数src和dest所指的内存区间如果重叠则无法保证正确拷贝,而memmove却可以正确拷贝;

数组元素2中方式枚举

4,  字符串连接

char *strcat(char *dest,const char *src);

char *strncat(char *dest,const char *src,size_t n);

注意我们之前说过,str开头的函数对于'\0'的问题看官应该还记得;

[再请看官注意,dest缓冲区的Strlen长度应该是strlen(dest)+n+!]

5,  比较字符串

#include <string.h>

int memcmp(const void *s1,const void *s2,size_t n);

int strcmp(const char *s1,const char *s2);

int strncmp(const char *s2,const char *s2,size_t n);

返回值:负值表示s1<s2,0表示s1 == s2,正值表示s1>s2(值是Ascii表中的值)

memcmp从前到后逐个比较缓冲区s1,s2返回值(不管字符串中间是否有'\0');

strncmp的比较条件是:要么在其中一个字符串中遇到'\0'结束,要么比较完n个字符串;

#include <strings.h>

int strcasecmp(const char *s1,const char *s2);

int strncasecmp(const char *s1,const char *s2,size_t n);此处再解释下为何用size_t n是因为n是有符号的,可以为0 -1等,-1表示错误;

在比较过程中忽略大小写;此处不是C标准库,是POSIX标准;

6,  搜索字符串

char *strchr(const char *s,int c);

char *strrchr(const char *s,int c);

返回值:找到字符c,返回字符串s中指向字符c的指针,如果找不到字符c就返回NULL;

right-to-left;

查找字符串

#include <string.h>

char *strstr(const char *haystck,const hcar *needle);

strstr在一个长字符串中从前到后找一个子串(Substring);

7,  分割字符串

分隔符/界定符(delimiter);

#include <string.h>

char *strtok(char *str,const char *delim);

char *strtok r(char *str,const char *delim,char **saveptr);

C标准库简单解读的更多相关文章

  1. golang中的标准库context解读

    简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + se ...

  2. Python常用的标准库以及第三方库有哪些?

    20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...

  3. Python常用的标准库以及第三方库

    Python常用的标准库以及第三方库有哪些?   20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...

  4. Python 常用的标准库以及第三方库有哪些?

    作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. C++标准库<string>简单总结

    C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...

  6. 通过atomic_flag简单自旋锁实现简单说明标准库中锁使用的memory_order

    在使用标准库中的加锁机制时,例如我们使用std::mutex,写了如下的代码(下面的代码使用condition_variable可能更合适) std::mutex g_mtx; int g_resNu ...

  7. 如何美观地打印 Python 对象?这个标准库可以简单实现

    前不久,我写了一篇文章回顾 Python 中 print 的发展历史 ,提到了两条发展线索: 明线:早期的 print 语句带有 C 和 Shell 的影子,是个应用程序级的 statement,在最 ...

  8. 标准库path源码解读

    先看标准库 作用:关于路径的一些实用操作 https://github.com/golang/go/blob/master/src/path/path.go 源码地址 func IsAbs func ...

  9. PHP 标准库 SPL 之数据结构栈(SplStack)简单实践

    PHP 5.3.0 版本及以上的堆栈描述可以使用标准库 SPL 中的 SplStack class,SplStack 类继承双链表 ( SplDoublyLinkedList ) 实现栈. 代码: & ...

随机推荐

  1. mvc3.0ModelFirst生成实体

    前沿 这几天想用mvc写点东西,mvc现在自己工作也不用,所以有些生.于是弄点视频研究一下.可能一些经常接触mvc的对这个问题看来,就是小kiss,但是我感觉自己研究出来了还是比较兴奋.在3.0根据模 ...

  2. linux 下C语言编程库文件处理与Makefile编写

    做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一 ...

  3. ubuntu远程登陆windows

    首先安装rdesktop : apt-get install rdesktop.p 程序安装完后,在终端命令行中输入:$ rdesktop -g 1024x768 -d 24 ip,就进入了windo ...

  4. (转载)在Delphi中利用MSDASC来配置数据库链接

    在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...

  5. Java 单链表的倒置

    在面试,笔试的过程中经常会遇到面试官问这种问题,实现单链表的倒置方法.现在对单链表的倒置犯法做个记录,方便自己以后查看. 单链表的定义: public class Node { int v; Node ...

  6. chmod 命令 set uid ,set gid,sticky bit 说明

    permission的符号模式表: 模式 名字 说明 r 读 设置为可读权限 w 写 设置为可写权限 x 执行权限 设置为可执行权限 X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行 ...

  7. C++中二维数组的动态创建与处理

    C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数.采用这种格式,列数必须指出,而行数无需指 ...

  8. leetcode 第九题 Palindrome Number(java)

    Palindrome Number time=434ms 负数不是回文数 public class Solution { public boolean isPalindrome(int x) { in ...

  9. Codeforces Round #197 (Div. 2) : D

    这题也是一个线段树的水题: 不过开始题目没看明白,害得我敲了一个好复杂的程序.蛋疼啊.... 最后十几分钟的时候突然领悟到了题意,但是还是漏掉一个细节,老是过不去... 以后比赛的时候不喝啤酒了,再也 ...

  10. C语言面试题(嵌入式开发方向,附答案及点评)

    整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...