C字符串处理函数
部分参考百科。
C常用字符串函数:字符串输入函数,字符串输出函数,字符串处理函数,标准输入输出流
字符串处理函数:
1、字符串长度:strlen(str),返回字符串实际长度,不包括'\0',返回值类型为size_t。
2、字符串拼接:strcat(str1,str2),str2拼接到str之后,如果str1长度不够大,将会溢出,覆盖str1之后的数据;
strncat(str1,str2,n),拼接str2中指定长度n的数据到str1中。
3、字符串对比:strcmp(str1,str2),对比str1和str2中的数据内容是否完全相等,是返回0,否则返回非零值。
strncmp(str1,str2,n),对比str2中的前n位和str1是否相等。//int temp = strncmp("111"4, "111555555", 3);//相等为0 3指的是str2里面的前三位
4、字符串拷贝:strcpy(str1,str2),str2中的数据copy到str1中,str1和str2所指内存区域不可以重叠且str1必须有足够的空间来容纳str2的字符串,str1先清零然后将str2的内容copy进
str1,str1长度不足的话程序会崩溃。
strncpy(str1,str2,n),str2指定长度n的数据copy到str1。
5、字符串查找:strchr(str,c),查找字符c在字符串str中首次出现的位置,成功则返回要查找字符第一次出现的位置,失败返回NULL。
strrchr(str,c),查找字符c在字符串str中最后一次出现的位置,成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。
strstr(str1,str2),判断str2是否是str1的子串,如果是返回str2在str1中首次出现的地址,失败返回NULL。
strpbrk(str1,str2),在str1中找出str2任一字符首次出现的位置并返回第一个满足条件的字符指针,失败返回NULL。
6、字符串转换:atoi(str),字符串转换成整形数据,头文件#include<stdlib.h>。函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),
直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 NULL。
atof().atol()参考atoi()。
long int strtol(const char *nptr,char **endptr,int base);strtol函数会将参数nptr字符串根据参数base来转换成长整型数。
a.参数base范围从2至36,或0(10进制)
b.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符.eg: char *pos; strtol("123abc", &pos, 10);strtol返回123,pos指向字符串中的字母a。
参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串。
double strtod(const char *nptr,char **endptr);字符串转换成浮点数据。
7、字符串格式化输出:sprintf(char* buffer,const char*formt,[agrument],...),buffer:将要写入的字符串缓冲区,format:格式化字符串,,[agrument],...:可选参数,可以是任何类型的数据。
如果成功返回写入buffer 的字符数,结束字符‘\0’不计入内,出错则返回-1.
如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1。
第二个参数中会写入除格式外的数据到buffer,如 int num=sprintf(buffer,"string:%s\n",20); buffer中会存储's','t','r','i','n','g',':','\n','\0'
num+=sprintf(buffer,"char:%c\n",c); buffer中会存储's','t','r','i','n','g',':','\n','c','h','a','r',':','c','\n','\0'
附测试代码如下:(编译器vs2015)
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include<stdio.h>
#include<stdlib.h>
#define STRLEN 255
int main()
{
char *str = "1234444555"; //常量区,无法修改值
char strarr[] = "111222333444";
char strcarrier[STRLEN] = { 0 };
size_t szlen = strlen(strarr); //12
size_t arrayles = sizeof(strarr); //13
//strcat(str, strarr); //错误,往某位置写入时发生访问冲突 str存储在常量区
if ((strlen(strarr) + strlen(str) - 1) <= sizeof(strarr))
{
strcat(strarr, str); //风险的行为,字符串溢出,覆盖straar之后的空间
}
strcat(strcarrier, str);
strcat(strcarrier, strarr);
memset(strcarrier, 0, STRLEN);
strncat(strcarrier, str, 5);//截取后面str中的数据,长度为5
strncat(strcarrier, str, STRLEN-strlen(strcarrier));//最大长度STRLEN-strlen(strcarrier)
memset(strcarrier, 0, STRLEN);
strcpy(strcarrier, strarr);//str1的长度大于str2的长度,str1先清零然后将str2的内容copy进str1
int temp = strcmp(strcarrier, str);
temp = strcmp(strcarrier, strarr);
temp = strncmp(strcarrier, "333", 5);//非零值
temp = strncmp(strcarrier, "111555555", 3);//相等为0 3指的是str2里面的前三位
memset(strcarrier, 0, STRLEN);
strncpy(strcarrier, "1122334455", 3);
memset(strcarrier, 0, STRLEN);
strcpy(strcarrier, str);
temp = int(strchr(strcarrier, '4'));//返回的是首次出现的指针
temp = int(strrchr(strcarrier, '4'));
temp = int(strstr(strcarrier, "455"));
temp = atoi(strcarrier);
char *endptr = NULL;
memset(strcarrier, 0, STRLEN);
strcpy(strcarrier, str);
temp = strtol(strcarrier, &endptr, 10);
temp = strtol(strcarrier, &endptr, 16);
memset(strcarrier, 0, STRLEN);
strcpy(strcarrier, "11122str11");
strtol(strcarrier, &endptr, 16);
strcpy(strcarrier, "");
sprintf(strcarrier, "%d", temp);
return 0;
}
C字符串处理函数的更多相关文章
- VB常用字符串操作函数
1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...
- php-设置关键词高亮的字符串处理函数
/** * 设置关键词高亮的字符串处理函数 * @param [string] $str [要高亮的字符串] * @param array $word_arr [关键词] */function set ...
- JS字符串格式化函数 string.format
原生JS写的仿C#的字符串format函数,在此基础上又增加了便于JS使用的字面量对象参数. 参照C#中的规则,调用的时候会检测字符串格式,如果字符串格式不规范,或者传入的参数为null或undefi ...
- JS字符串替换函数:Replace(“字符串1″, “字符串2″),
JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...
- Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数
怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...
- SQL注入的字符串连接函数
在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...
- C语言字符串处理函数
函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include < ...
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- 飘逸的python - 增强的格式化字符串format函数
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...
- Python:常见操作字符串的函数
Python中提供了很多操作字符串的函数: string = "hello, my dear python!" string.capitalize() #将字符串中的第一个字母大写 ...
随机推荐
- 关于Storm Stream grouping
在Storm中, 开发者可以为上游spout/bolt发射出的tuples指定下游bolt的哪个/哪些task(s)来处理该tuples.这种指定在storm中叫做对stream的分组,即stream ...
- 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载
最近公司的app上线了,在推广APP的时候出现了一个问题,因为Android和IOS的下载地址不一样,那么在推广的时候就要推广两个二维码,这样比较麻烦,如何简化我们的推广,让IOS用户扫描二维码的时候 ...
- 【js】性能问题
执行环境和作用域 一.全局变量和局部变量 每个执行环境都有与之关联的变量对象(变量和函数存储在这里),全局执行环境是最外围的执行环境,根据ECMA实现所在的宿主不同,表示的执行环境的对象也不同.在we ...
- div 宽高相等2种实现方式
div.wh{ background:#ff0;width:50%;position:relative;display:inline-block; } div.wh:before{ content: ...
- 【Spring】使用Spring和AMQP发送接收消息(上)
讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...
- Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文
不知是什么原因,所有的视图中Ajax,ViewBag之类的都提示为找到上下文(由于换了个版本Vs,猜测应该是Vs的原因),然后顺利在网上找到了解决方案. 给地址链接:https://social.ms ...
- SQLSERVER2008 错误18456
我遇到的问题,已经解决,如果你遇到不能解决可以咨询我 1.以windows验证模式进入数据库管理器. 第二步:右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的).把强制实施密 ...
- C# 使用 USB转串 接收数据 问题
C# 使用 USB转串 接收数据的 问题 硬件设备是MicroUSB接口,通过USB转串驱动接入PC机.自己用winForm写了一个读取串口数据的小程序,总是接收不到数据. 用传sscom32串口工具 ...
- 10分钟精通SharePoint - SharePoint升级
类型: b2b(安装更新)和v2v(跨版本升级) 内容:二进制文件和数据库 过程: 升级前检查 - 检查场内数据,配置和自定义等等 升级准备和计划 - 根据需要和升级检查制定相应计划和准备工作 ...
- Mybatis的@Options注解
mybatis的@Options注解能够设置缓存时间,能够为对象生成自增的key 第一个使用场景: 有一个表 CREATE TABLE instance ( instance_id BIGINT UN ...