<c和指针>学习笔记4之字符串
1 字符串基础
NUL字节是字符串的终止符,但它本身并不是字符串的一部分,所以字符串的长度并不包括NUL字节。
(1)字符串长度
size_t strlen(char const * string)注意这里返回的是size_t,它是一个无符号整数类型,在表达式中使用无符号数可能导致不可预料的结果。例如
if(strlen(x)-strlen(y)>=0)这个表达式将会永远真 成立。
(2)不受限制的字符串函数
使用不受限制的函数之前,必须确定字符串实际上是以NUL字节结尾
char *strcpy(char *dst,char const *src)
注意:无法保证目标字符数组有足够的空间容纳需要复制的字符串
char *strcat(char *dst,char const *src)
int strcmp(char const *s1,char const *s2)
s1小于s2 返回一个小于0的
s1大于s2 返回一个大于0的
鉴于上面三种可能导致长度不够引出错误,出现了对应有长度限制的接口函数
char *strncpy(char* dest,char const*src,size_t len)
char *strncat(char* dest,char const*src,size_t len)
int strncmp(char const *s1,char const*s2,size_t len)
2 字符串查找基础
(1)在一个字符串中查找一个特定字符
char *strstr(char const *str,int ch)
char *strrchr(char const *str,int ch)
(2) 查找任何几个字符
char *strpbrk(char const *str,char const *group)
返回一个指向str中第一个匹配group中任何一个字符的字符位置。
(3)查找一个字串
char *strstr(char const*s1,char const *s2)
(4)查找标记
char *strtok(char *strr,char const *sep)
从字符串中隔离各个单独的称为标记的部分并丢弃分隔符。
2 内存操作
之前说过,字符串是以NUL字符结尾的,也就是说上面的函数处理字符串中内部有NUL的情况就不是那么方便了,就出现了如下函数。可以处理任意的字节序列
void *memcpy(void* dest,void const *src,size_t length) 从src起始位置赋值length个字节到dst的内存起始位置
void memove(void *dest,void const *src,size_t length)
void memcmp(void const *a,void const *b,size_t length)
<c和指针>学习笔记4之字符串的更多相关文章
- 【python学习笔记】3.字符串使用
[python学习笔记]3.字符串使用 字符串是一种序列,素有标准的序列操作对字符串用样适用,字符串是不可以改变 格式化操作符,%,左侧是格式化字符串,右侧是被格式的值,可以是一个值.元组.字典 数值 ...
- C++中的智能指针、轻量级指针、强弱指针学习笔记
一.智能指针学习总结 1.一个非const引用无法指向一个临时变量,但是const引用是可以的! 2.C++中的delete和C中的free()类似,delete NULL不会报"doubl ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- python学习笔记(二)、字符串操作
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...
- matlab学习笔记10_5 通用字符串操作和比较函数
一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张 ...
- C#学习笔记15:字符串、文件、目录的操作方法
字符串:不可变性 String str=”abcdf”; 将字符串转换为char数组:ToCharArray(); Char[] ch=str.ToCharAarray(); 将char数组转换为字符 ...
- 深入理解C指针----学习笔记
深入理解C指针 第1章 认识指针 理解指针的关键在于理解C程序如何管理内存,指针包含的就是内存地址. 1.1 指针和内存 C程序在编译后,以三种方式使用内存: 1. 静态. ...
- <c和指针>学习笔记6输入输出函数
1 错误报告 (1)perror函数 void perror(char const *message) error是标准库的一个外部整型变量(errno.h),保存错误代码之后就会把这个信息传递给用户 ...
- <c和指针>学习笔记5动态内存分配和预处理器
1 动态内存 比如声明数组得时候,我们需要提前预估数组长度,分配大了浪费,少了就更不好操作了.从而引入动态分配,需要的时候再分配. (1)malloc和free void *malloc(size_t ...
随机推荐
- Java知识点梳理——泛型
1.定义:泛型的本质是参数化类型,就是将类型由原来的具体的类型参数化,这种参数类型可以用在类.接口.方法中,分别称为泛型类.泛型接口.泛型方法: 2.泛型类:泛型类的声明和非泛型类的声明类似,除了在类 ...
- 在ios中使用单例模式编程
本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007 1. @implementation Singleton ...
- 查找SAP 系统Parameter ID 4种方法
转自 http://blog.csdn.net/jy00873757/article/details/8517426 ***程序RPR_ABAP_SOURCE_SCAN 一.用F1,直接可以看到这个 ...
- java和js互调 webview
public class JavaAndJSActivity extends Activity implements View.OnClickListener { private EditText e ...
- ceres求解BA第10章
1.前言g2o是根据边来保存每一个代价函数,它是在边类中构造误差函数,构造边的时候,会设置顶点.测量值.协方差矩阵等.而在ceres中,用problem类型来构造最终的目标函数.先是使用AddResi ...
- 郝健: Linux内存管理学习笔记-第1节课【转】
本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035751 摘要 MMU与分页机制 内存区域(内存分ZONE) LinuxBuddy分配算法 ...
- <再看TCP/IP第一卷>关于链路层的知识细节及相关协议
在TCP/IP协议族中,链路层的主要有三个目的: (1)为IP模块发送和接受数据报 (2)为ARP模块发送ARP请求和接受ARP应答 (3)为RARP发送RARP请求和接受RARP应答 TCP/IP支 ...
- Codeforces Round #553 (Div. 2) 题解
昨晚深夜修仙上紫记,虽然不错还是很有遗憾的. A. Maxim and Biology 看完就会做的题,然而手速跟不上 #include<cstdio> #include<iostr ...
- HDU4511 小明系列故事——女友的考验 —— AC自动机 + DP
题目链接:https://vjudge.net/problem/HDU-4511 小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memor ...
- make和rest用法
位置(position):下一个要读取或写入的数据的索引.缓冲区的位置不能为负,并且不能大于其限制(limit). 标记(mark)与重置(reset):标记是一个索引,通过Buffer中的mark( ...