C标准库简单解读
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标准库简单解读的更多相关文章
- golang中的标准库context解读
简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + se ...
- Python常用的标准库以及第三方库有哪些?
20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...
- Python常用的标准库以及第三方库
Python常用的标准库以及第三方库有哪些? 20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...
- Python 常用的标准库以及第三方库有哪些?
作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- C++标准库<string>简单总结
C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...
- 通过atomic_flag简单自旋锁实现简单说明标准库中锁使用的memory_order
在使用标准库中的加锁机制时,例如我们使用std::mutex,写了如下的代码(下面的代码使用condition_variable可能更合适) std::mutex g_mtx; int g_resNu ...
- 如何美观地打印 Python 对象?这个标准库可以简单实现
前不久,我写了一篇文章回顾 Python 中 print 的发展历史 ,提到了两条发展线索: 明线:早期的 print 语句带有 C 和 Shell 的影子,是个应用程序级的 statement,在最 ...
- 标准库path源码解读
先看标准库 作用:关于路径的一些实用操作 https://github.com/golang/go/blob/master/src/path/path.go 源码地址 func IsAbs func ...
- PHP 标准库 SPL 之数据结构栈(SplStack)简单实践
PHP 5.3.0 版本及以上的堆栈描述可以使用标准库 SPL 中的 SplStack class,SplStack 类继承双链表 ( SplDoublyLinkedList ) 实现栈. 代码: & ...
随机推荐
- ceph入门学习链接
https://tobegit3hub1.gitbooks.io/ceph_from_scratch/content/introduction/component.html
- NetSerialComm的基本使用方法
近期搞一个com口传输的小项目,原来认为是一个挺简单的一个小功能,结果生产商发来com以后直接傻眼了,还要对相关的硬件流进行处理 如下 // 硬件流控制设置 dcb.fOutxCtsFlow = FA ...
- OpenCart框架运行流程介绍
框架运行流程介绍 这样的一个get请求http://hostname/index.php?route=common/home 发生了什么? 1. 开始执行入口文件index.php. 2. requi ...
- C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎.本人使用pe ...
- python从socket做个websocket的聊天室server
下面的是server端:把IP改成自己的局域网IP: #coding:utf8 import socket,select import SocketServer import hashlib,base ...
- SVN版本控制与Visual Studio 2012的完美结合
今天电脑重装了,所以vs,sqlserver,svn都得重装,因为我的公司目前使用的版本控制工具是svn.vs和sqlserver的安装均正常没有出现问题,但是在装svn的时候出了一点小插曲!svn下 ...
- 开源网站管理工具—Altman
0×00前言 之前用过几款webshell工具,有B/C的也有C/S的,有的只能用于php或者aspx,当然个人用得最多.觉得用得舒服的也只有菜刀了. 但是毕竟菜刀是好几年之前的产物了,而且也已经停止 ...
- hdu 4442
一道超级easy的贪心 一眼看出了他的本质: 代码: #define mod 31536000 #include<cstdio> #include<algorithm> #in ...
- Codeforces Round #198 (Div. 2) —— C
C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明: 首先排好序,因为是全排列,乱序和顺序的结果是一样的: 然后呢···· 如果是数列 1 2 3 4 5 元素1 被 2 3 4 5每个减 ...
- 快速搭建Web服务器软件PHP+Apache+MySQL
搭建网站或者博客,需要一个合适的 Web 服务器.除了如下能在购买的虚拟空间上进行操作外,我们也可以在自己的电脑上搞定,因为可以用来方便快捷地测试网站或者博客主题,无论是 Wordpress.Joom ...