gpt4 book ai didi

C风格字符串

转载 作者:我是一只小鸟 更新时间:2023-07-08 22:31:41 25 4
gpt4 key购买 nike

image

C风格字符串

关于C风格字符串的问题

❓C++有string为什么还要学习C风格字符串?

  1. 某些场景使用C风格字符串更方便、更高效
  2. C标准库、Linux库 、开源库和数据库的接口函数,一定有C语言但不一定有C++(MySQL的接口函数只有C而没有C++)
  3. String是类,封装了C风格字符串(学习C风格字符串能帮助理解String类)

C中字符数组与字符串的区别

C中字符串的末尾会有**'/0' ​**,而字符数组没有 。

                        
                          char name[21]; 	//字符串,最多存放20个英文字符或10个中文字符,最后一个字符为 ' /0 ' 

                        
                      

C风格字符串的使用

字符串的初始化

                        
                          char name[11];			//未初始化,其值为垃圾直
char name[11] = "Hello";	//初始化为Hello,系统自动在末尾添加'/0'
char name[11] = {"Hello"}; //初始化为Hello,系统自动在末尾添加'/0'
char name[] = {"Hello"};	//初始化为Hello,系统自动在末尾添加'/0'
char name[11]   {"Hello"};	//初始化为Hello,系统自动在末尾添加'/0'(C++ 11 标准)
char name[11] = {0};		//全部元素初始化为0

                        
                      

清空字符串

使用 memset() ​函数清空字符串 。

语法: memset(字符数组的首地址即数组名,0,数组内存的空间大小) 。

                        
                          char name[10];
memset(name,0,sizeof(name));
//结果
0 0 0 0 0 0 0 0 0 0 

                        
                      

字符串复制或赋值

❗C语言字符串不能用" = "赋值 。

strcpy()函数

语法: strcpy(目标字符串,源字符串) 。

返回值: 返回目标字符串的首地址 。

⚠复制完字符串后,会自动在目标字符串后面追加' /0 ' 。

                        
                           如果目标字符串所指向的内存不够大,则会导致数组越界

                        
                      
                        
                          char name[11] = {"Hello"};
char namecpy[11];
strcpy(namecpy,name);
//结果
namecpy[11]——>Hello

                        
                      

strncpy()函数

语法: strncpy(目标字符串,源字符串,n个字符) 。

返回值: 返回目标字符串的首地址 。

⚠如果源字符串小于n,则拷贝完后会在目标字符串后追加' /0 ' 。

                        
                           如果源字符串大于或等于n,则截取前n个字符,且不会再目标字符串后追加' /0 '

                        
                        

如果目标字符串所指向的内存不够大,则会导致数组越界 。

                        
                          char name[11] = {"Hello"};
char namecpy[11];
strcpy(namecpy,name,3);
//结果
namecpy[11]——>Hel

                        
                      

‍ 。

字符串长度

语法: strlen(字符串的首地址即字符串名) 。

                        
                          char name [11] = { "Hello" };
cout << strlen(name) << endl;
//输出结果
5		//检索到'/0'时结束

                        
                      

‍ 。

字符串拼接

strcat()函数

语法: strcat(目标字符串,源字符串) ​ ​==目标字符串原有的'/0'会被覆盖掉== 。

                        
                          char firstname[10] = {"Hello"};
char lastname[10] = {" World"};
strcat(firstname,lastname);
//运行结果
Hello World

                        
                      

strncat()函数

语法: strcat(目标字符串,源字符串,n个字符) ​ ​==目标字符串原有的'/0'会被覆盖掉== 。

                        
                          char firstname[10] = {"Hello"};
char lastname[10] = {" World"};
strcat(firstname,lastname,2);
//运行结果
Hello Wo

                        
                      

‍ 。

字符串比较

目标字符串与源字符串(或源字符串前n个字符)比较 返回值
> 1(ASCII码的差)
= 0
< -1(ASCII码的差)

strcmp()函数

语法: strcmp(目标字符串,源字符串) 。

                        
                          char name1[10] = {"Hello"};
char name2[10] = {"hello"};
strcmp(name1,name2);
//运行结果
-32

                        
                      

strncmp()函数

语法: strcmp(目标字符串,源字符串,前n个字符) 。

                        
                          char name1[10] = {"Hello"};
char name2[10] = {"hello"};
strcmp(name1,name2,3);
//运行结果
-32

                        
                      

‍ 。

字符查找

strchr(字符串,要查找的字符) 【是从一个字符串str中第一次出现该字符character的位置】 。

strrchr(字符串,要查找的字符) 【是从一个字符串str中最后一次出现该字符character的位置】 。

返回值:如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,存在和首地址相减,可以得到下标。如果未找到该字符则返回 NULL.

‍ 。

字符串查找

语法:strstr(字符串,子串) 。

返回值:返回子串在字符串中第一次出现的地址,没有返回0 。

⚠C风格字符串的注意事项

5⃣在VS中使用C风格字符串是应加上 #define _CRT_SECURE_NO_WARNINGS ​ 。

‍ 。

1⃣字符串的结尾标志为'/0',在处理时会从起始位置开始搜索直到搜索到'/0'为止 。

不会判断数组越界的原因:

操作字符串的函数形参为指针,只存放了字符串的起始地址,没有字符串的长度参数,无法判断是否越界 。

2⃣结尾标识符'/0'后面都是垃圾值 。

3⃣字符串在 每次 使用前都要初始化 。

4⃣不要再子函数里面使用sizeof运算符(因为子函数中的参数为指针,总是占8字节(64位操作系统)) 。

最后此篇关于C风格字符串的文章就讲到这里了,如果你想了解更多关于C风格字符串的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com