首页 > 其他分享 >C风格字符串

C风格字符串

时间:2023-07-08 17:12:01浏览次数:40  
标签:11 10 name char 风格 字符串 Hello

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位操作系统))

标签:11,10,name,char,风格,字符串,Hello
From: https://www.cnblogs.com/huajianyizou/p/c-style-string-28qs0e.html

相关文章

  • Java字符串比较 == 和 equals方法的区别
    今天在排除一个bug的时候出现了一个很低级但是也很容易被忽视的错误,在此写了一个小例子做记录。首先我先说一下错误的场景,我读取了一段json数据,并使用JSONObject的实例对象的getString方法去拿到了一个value数据,由于我忽视了getString方法的返回值是一个String对象,所以我在后面......
  • 解决MySQL存储较长的字符串的具体操作步骤
    MySQL存储较长的字符串在数据库中,我们经常需要存储各种类型的数据。有时,我们需要存储较长的字符串,如文章内容或者文本文件。MySQL是一个流行的关系型数据库管理系统,它提供了多种方式来存储较长的字符串数据。本文将介绍在MySQL中存储较长的字符串的几种常用方法,并提供相应的代码示......
  • 如何实现MySQL 字符串转换成数组的具体操作步骤
    MySQL字符串转换成数组在MySQL中,我们经常需要对字符串进行处理和转换。有时候,我们需要将一个字符串拆分成多个部分,然后进行进一步的处理。这时,将字符串转换成数组是一种常见的操作。方法一:使用SUBSTRING_INDEX函数MySQL提供了SUBSTRING_INDEX函数,可以用于将一个字符串按照指定......
  • 字符串学习笔记
    哈希最长公共子串求m个长为n的字符串的最长公共子串。二分答案,check(k)的思路就是把每个字符串的长度为k的子串哈希值扔到哈希表里,每个字符串的每种子串都只扔一次,最后看有没有一种出现了n次。......
  • Java中的字符串到数组 – 如何将字符串转换为数组
    当您开发文本处理应用程序或处理数据时,能够将字符串转换为数组非常有帮助。Java中的字符串是一组字符,而数组是同一类型元素的集合。您可以使用转换过程将字符串解构为各个部分,然后将这些部分存储在数组中以供进一步操作或分析。本文将为您介绍各种将字符串转换为数组的Java技......
  • 查找多个字符串的正则表达式
    非元组捕获的语法为:(?:exp) 比如查找江浙沪包邮区:(?:浙江|上海|江苏) 元组的概念(待补充)Python中的元组Python中元组(Tuple)是一种特殊的列表,是Python中可以用于存储数据集合数据类型。它的特殊性是:元组是一个是有序的且不可改变的集合......
  • 2023-07-07:给出两个字符串 str1 和 str2。 返回同时以 str1 和 str2 作为子序列的最短
    2023-07-07:给出两个字符串str1和str2。返回同时以str1和str2作为子序列的最短字符串。如果答案不止一个,则可以返回满足条件的任意一个答案。输入:str1="abac",str2="cab"。输出:"cabac"。答案2023-07-07:大体步骤如下:1.初始化字符串str1和str2分别为"abac"......
  • 2023-07-07:给出两个字符串 str1 和 str2。 返回同时以 str1 和 str2 作为子序列的最短
    2023-07-07:给出两个字符串str1和str2。返回同时以str1和str2作为子序列的最短字符串。如果答案不止一个,则可以返回满足条件的任意一个答案。输入:str1="abac",str2="cab"。输出:"cabac"。答案2023-07-07:大体步骤如下:1.初始化字符串str1和str2分别为"abac"和"cab"......
  • [oeasy]python0071_字符串类型_str_string_下标运算符_中括号
    回忆上次内容上次分辨了静态类型语言动态类型语言 python属于对类型要求没有那么严格的动态类型语言 对初学者很友好不过很多时候也容易弄不清变量类型 直接修改代码增强程序的可读性把变量的类型明确标......
  • 844. 比较含退格的字符串
    给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。输入:s="ab#c",t="ad#c"输出:true解释:s和t都会变成"ac"。>代码classSolution{private:stringprocess......