c语言学string,c语言中的string
1. strlen(char const* s);
函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'。
2. strcpy(char* dest, char const* source);
dest:目标指针;
source:是源指针,传入的必须是c风格字符串或者字符数组。
返回值: dest指针
注意:1. 该函数会将包括'\0'在内的source全部拷贝到dest。如果char* source="abcd"; dest为char[],则dest应该定义为char[5];
2. src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
3. C语言中不支持用赋值符号“=”直接将一个字符数组赋值给另一个字符数组。因为C语言不支持运算符重载。故而必须用strcpy操作。
3. strncpy(char* dest, char const* source, size_t n);
n代表可以指定字符个数进行赋值。
功能:将字符串source中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似,但是n值需特别注意。
1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。一般建议采取memset将dest的全部元素用null填充,如:memset(dest,0,8)(8为从dest起始地址开始前8个位置填充null,dest可以为字符指针和数组名)。
注意:char* p="abc"; char ch[5]; sizeof(p)为4(包含null)(有些编译器不行),sizeof(ch)为5。
这样:
如果n = source串长度,与strcpy一致。
如果n = dest串长度,[0,src串长度]处存放于dest字串,(src串长度, dest串长度]处存放NULL。
2)source串长度>dest串长度
如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑source串复制完整性,可以将dest最后一字符置为NULL。
所以,一般把n设为dest(含null)的长度(除非将多个source复制到dest中)。当n=dest串长度时,定义dest为字符数组,因为这时没有null字符拷贝。
4. const char *c_str();
c_str()函数是c++中属于string类的成员函数,返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。
注意:(如下这段内容参考 http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html)
1)c_str()生成一个const char*指针,指向以空字符终止的数组,但这个数组的数据是临时的(如前所述,其实它指向的是string对象内部真正的char缓冲区),当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。看下例:
const char* c;
string s="1234";
c = s.c_str();
cout<
s="abcd";
cout<
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd。因此应该把原string的数据复制到用户自己可以管理的内存中。怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。
//const char* c; //①
//char* c; //②
//char c[20];
char* c=new char[20];
string s="1234";
//c = s.c_str();
strcpy(c,s.c_str());
cout<
s="abcd";
cout<
注意:不能再像①一样将c声明为const char*类型的指针了,因为c要接收strcpy的值;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。
2)c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
3) data():与c_str()类似,但是返回的数组不以空字符终止。
5. int strcmp ( const char * str1, const char * str2 );
比较两个字符串数组的大小。规则如下:
①字符串1小于字符串2,strcmp函数返回一个负值;
②字符串1等于字符串2,strcmp函数返回零;
③字符串1大于字符串2,strcmp函数返回一个正值;
实际比较时,按字符位置从小到大依次比较各个字符;直到第一对不相等的字符,或者任何一个字符数组遇到'\0'。注意:
if("ABC">"DEF") /*错误的字符串比较*/
if(strcmp("ABC","DEF") /*正确的字符串比较*/
6. char *strcat(char *dest,char *src);
strcat用于连接字符串,返回结果的头指针。
参考如下两篇文章:
http://www.cnblogs.com/clover-toeic/p/3885181.html
http://blog.csdn.net/smf0504/article/details/52055971
来源:https://www.cnblogs.com/myseasky/p/7458752.html
c语言学string,c语言中的string相关推荐
- c语言用string类型,c语言中的string
1. strlen(char const* s); 函数传入的是c风格字符串(即以'\0'结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...
- c语言中char * string,浅析string 与char* char[]之间的转换
1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().en ...
- C语言 before string,c语言中expected expression before是什么意思?
满意答案 chowjack 推荐于 2019.10.23 采纳率:57% 等级:10 已帮助:3269人 1.意思是:在 xxx 之前 应输入表达式. 2.下面为C语言的错误大全及中文解释: 1 ...
- C语言中的string头文件解析
标准库提供了一些函数用于处理字符串,它们的原型位于头文件string.h中. •string.h头文件定义了一个变量: size_t:这是无符号整数类型,它是 sizeof 关键字的结果. •定义了一 ...
- C语言中的string.h头文件
C库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中. string.h头文件中常用的函数有strlen(),strcat(),strcmp(),strncmp,s ...
- C语言中的String类
最为推荐:https://www.luogu.org/blog/co2021/solution-p1032 https://blog.csdn.net/fdqw_sph/article/details ...
- java成员变量默认是_在Java语言中,String类型的成员变量的默认初始值是( )
在Java语言中,String类型的成员变量的默认初始值是( ) 答:C.null 学生最主要的权利是() 答:受教育权 提倡教育要适合孩子的 "敏感期"的教育家是 答:蒙台梭利 ...
- C语言中String库函数大全
C语言中String库函数 以下内容摘自<C程序设计教程>(美)H.M.Deitel P.J.Deitel著,薛万鹏等译,机械工业出版社. void *memccpy (void *des ...
- SWIFT MX报文基础函数与Java语言中String的方法对照理解
SWIFT MX报文基础函数与Java语言中String的方法对照理解 前言 一.SWIFT是什么? 二.SWIFT MX是什么? 二.报文基础函数与Java语言中String的方法对照表 总结 前言 ...
最新文章
- Linux系统文件I/O编程(一)---open()等基本函数
- java中printarray和selectsort方法_算法题(一)
- Is It A Tree?(hdu1325)
- aftershokz蓝牙搜不到_iphone xr黑屏无法开机怎么办?iphonexr蓝牙连不上怎么办?
- html 网络请求 json数据,写一个json格式API,http请求接收json数据
- 采用dlopen、dlsym、dlclose加载动态链接库【转】
- vue修改编码_看,官方出品了 Vue 编码风格指南!
- 爱企人事工资管理系统 v8.1 免费下载
- udp超过mtu长度 linux,TCP UDP 数据包长度(MSS)总结
- SQLMAP注入拖库过程 1
- 慧都科技:软件正版化不会一蹴而就 但趋势明显
- 2022-04-14每日刷题打卡
- 2022-2028年中国移动电商行业深度调研及投资前景预测报告
- 百慕大财政部批准Velocity Ledger ICO申请
- 软考 中级职称哪些最热门_最怪异的职称也可能是最受欢迎的
- 第一类换元法(凑微分法)
- badboy和jmeter的下载安装及使用
- 计算机基础应用试题——第二卷
- Veritas NetBackup8.1.1汉化
- Spark实时项目所遇错误,启动SpringBoot收集数据发现数据能读取但全是清一色的404的数据