这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的

 
1、strlen函数:计算目标字符串长度,
   格式:strlen(字符指针指向区域)
注意1:①不包含字符串结束符‘\0’ 
         ②需要导入库<string>
注意2:strlen常常会和sizeof混淆,比如:
这里是一些伪代码:

//打开一个文件,然后写操作
int fd = open("我是文件", O_WRONLY);
//写
char buf[256];
int num = 1;
while(1) {
memset(buf, 0x00, sizeof(buf));
//循环写
sprintf(buf, "xiaoming%04d", num++);
//strlen只是获取buf中字符串的长度
write(fd, buf, strlen(buf));
sleep(1);
}
//关闭描述符
closde(fd);

--------------------------------------------------- //打开一个文件(上面写之后的),然后读操作
int fd = open(argv[1], O_RDONLY); char buf[256];
int ret = 0;
while(1) {
//循环读
//sizeof是求整个buf的大小
ret = read(fd, buf, sizeof(buf));
if (ret > 0) {
printf("read:%s\n", buf);
}
} //关闭描述符
closde(fd);
2.拷贝函数:strcpy   参数: 目标字符串 源字符串
   格式strcpy(目标字符串 ,源字符串 );
 注拷贝字符串时会将/0也拷贝
注意:strcpy使用时,目标字符串长度如果小于源字符串,会溢出(bufferOverflow),报错。
 
 有限拷贝:strncpy   参数: 目标字符串  源字符串  字符长度
格式:strcpy(目标字符串 ,源字符串 ,长度);
成功:返回目标字符串的首地址
  失败:NULL
注:有限拷贝不会将\0拷贝到目标字符串中
 

复制内存:memcpy() 参数:void *memcpy(void * dest, const void * src, size_t num);

memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上。

memcpy()并不关心被复制的数据类型,只是逐字节地进行复制
 注意:

①dest 指针要分配足够的空间,也即大于等于 num字节的空间。如果没有分配空间,会出现断错误。

       ②会完整的复制 num个字节,不会因为遇到“\0”而结束
 
3、追加函数/有限追加函数 strcat/strncat:
由于std::string和char*转换比较容易,推荐直接用c++进行字符串拼接等操作
格式:strcat(目标字符串 ,源字符串) //  将源字符串连接到目标字符串的尾部
格式:strncat(目标字符串 ,源字符串,长度n)//将源字符串前n个连接到目标字符串的尾部
注:①被追加的目标字符串  需要有足够空间 
       ②追加中 先去掉 目标字符串中的 \0 再进行追加将 源字符串中的\0也追加上
       ③有限追加注意:有限追加也会将\0追加
 
 
4、比较函数/有限比较函数strcmp/strncmp
和字符串拼接一样,c++重载了运算符,可以使用"==" "!="进行字符串比较
  格式:strcmp(字符串 1,字符串 2)// 比较1与2
  格式:strcmp(字符串 1,字符串 2,比较长度n) // 比较1与2前n个字符串
注: ①在不同操作系统中strcmp结果会不同 有的返回1  0 -1   还可能返回ASCII差值  
        ②字符串操作都是在\0结尾之前
 
5、字符串转化函数 sprintf  / sscanf:
数据格式化后放入在字符串中
sprintf使用的较多,使用场景比如,1.获取时间戳,格式化时间格式;2.日志文件系统写入格式化;3.浮点数小数点后精度保留;...等
格式: sprintf(目标字符串 ,"参数",源字符串 )// 根据参数将源字符串来转换并格式化数据,然后将结果输出到指定的目标字符串中
           scanf(目标字符串 ,"参数",&源字符串 ) //根据参数将源字符串来转换并格式化数据,然后将结果输入到指定的目标字符串中  
注意:①sscanf与scanf一样需要在程序开始加入警告
           ②成功时返回具体个数  失败 -1
 
6、在字符串中查找字符的位置 strchr函数:
推荐使用c++的find函数
  格式: strchar(字符串,‘字符’) // 失败返回空的值(UNLL)
    注意 :①找汉字时格式 “ 汉字 ”,是双引号非单引号 
               ② 字符使用单引号引起来
 
7、在字符串中查找另外字符串的位置 strstr函数:
推荐使用c++的find函数
    格式 strstr(源字符串,“匹配字符串”)
     注意: 匹配字符串使用双引号引起来
 
8、字符串分割 strtok函数 
我用的很少,一般是自己用c++封装split方法,其中要用到c++的流和getline函数
getline两种用法:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
void split(const std::string &s, std::vector<std::string> &sv, const char delimiter = ' ') {
sv.clear();
std::istringstrem iss(s);
std::string temp; //getline会通过流ss,在遇到delimiter之前,将之前的字符串写入temp中
while (getline(iss, temp, delimiter)) {
sv.push_bash(temp);
} return;
}
格式  strtok(目标字符串,“目标字符串中所包含的字符”)
注意:① 将切割点用\0表示,切完之后会破坏原先字符串样式
                   ②当连续出现多个分割字符时只替换第一个为\0
 
9、atoi 转整形 /atof转 双精度 /atol转long类型 :
格式:  atoi(目标字符串)  / atof(目标字符串) / atol(目标字符串)
注意:①跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符('\0')才结束转换
  
 
 

c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol的更多相关文章

  1. C 常见字符串操作函数

    头文件 <string.h> 1. char *strstr(const char *str1, const char *str2);      判断str2是否为str1的子串  //s ...

  2. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  3. mysql常见字符串处理函数结束

    一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2…,sn) 将s1,s2…,sn连接成字符串 CONCAT ...

  4. 字符串(NSString)及常见字符串处理函数

    从本系列文章的开始,我们就使用过字符串对象,但是我们却还没有比较详细的介绍过它.使用@符,再一对双引号将一组字符串引用起来,例如: @”In fact, Objective-C is very sim ...

  5. Python常见字符串方法函数

    1.大小写转换 S.lower() S.upper() 前者将S字符串中所有大写字母转为小写,后者相反 S.title() S.capitalize() 前者返回S字符串中所有单词首字母大写且其他字母 ...

  6. mysql常见字符串处理函数

  7. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  8. C 字符串操作函数

    针对C风格的字符串(char p[n];): 长度(strlen).追加(strcat, strncat).比较(strcmp, strncmp).查找(strchr, strstr)等. --带n的 ...

  9. php课程 6-22 字符串格式化函数有哪些(精问)

    php课程 6-22 字符串格式化函数有哪些(精问) 一.总结 一句话总结: 1.猜测一下$_GET()怎么来的? 函数赋值给变量的操作:$_YZM=get();   这样就可以很好的解释哪些全局变量 ...

随机推荐

  1. Android开发----开发工具的安装与TextView组件

    开发工具的安装 选择使用Android Studio进行开发,Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT, ...

  2. Java高级语法之反射

    Java高级语法之反射 什么是反射 java.lang包提供java语言程序设计的基础类,在lang包下存在一个子包:reflect,与反射相关的APIs均在此处: 官方对reflect包的介绍如下: ...

  3. STM32定时器触发ADC多通道连续采样,DMA缓存结果

    STM32的ADC使用非常灵活,采样触发方面:既支持软件触发,定时器或其他硬件电路自动触发,也支持转换完成后自动触发下一通道/轮转换.转换结果存储方面:既支持软件读取和转存,也支持DMA自动存储转换结 ...

  4. 如何快速写出高质量的 Go 代码?

    前言 团队协作开发中,必然存在着不同的代码风格,并且诸如 http body close,unhandled error 等低级错误不能完全避免.通过使用 ci lint 能够及早的发现并修复问题,提 ...

  5. pwnkit漏洞分析-CVE-2021-4034

    研究了一下前段时间的Polkit提权漏洞,里面有很多以前不知道的技巧.漏洞很好用,通杀CENTOS.UBUNTU各版本. 主要是分析这个POC触发原理.POC如下: /* * Proof of Con ...

  6. 人工智能与智能系统2-> 机器人学2 | 时间与运动

    <Robotics, Vision and Control>学习到第三章,我才发现这本书是有配套视频的,第二章看的好辛苦,很多地方生硬理解了一下,现在打算把视频再好好看一看,作为补充,也会 ...

  7. c#序列化感悟(重点讲讲二进制序列化)

    序列化是一种通过将对象转化为字节流,从而达到储存对象,或者将对象传输到内存,数据库或文件的一个过程,主要用途是保存对象的状态(包括对象的数据),方便对对象的重建,反之读取就是反序列化. 三种序列化类型 ...

  8. 如何高效地写 Form

    工作少不了写"增删改查","增删改查"中的"增"和"改"都与 Form 有关,可以说:提升了 Form 的开发效率,就提 ...

  9. Properties打印流

    简介 java.util.Properties 继承于 Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java类使用,比如获取系统属 ...

  10. Charles抓取手机包设置