IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言—常见字符串函数与sizeof详解 -> 正文阅读

[C++知识库]c语言—常见字符串函数与sizeof详解

1.sizeof使用

a.代码1

int main()
{
	int a = 0;
	int arr[] = { 1,2,3,4 };
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof(&a));//表示地址的大小
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(arr));//计算数组arr的大小(单位为字节)
	printf("%d\n", sizeof(arr)/sizeof(arr[0]));//计算数组arr的空间个数
	return 0;
}

解释:

(1)sizeof是计算大小的(单位为字节),?sizeof后面可以跟变量,类型(跟类型时一定要将类型括起来),地址(因为是32位机器,所以地址大小为4字节,如果是64位,结果就是8字节),数组名。

(2)sizeof也可以计算数组的空间的个数。

2.strlen函数

a.代码1

int main()
{
	char arr1[] = { 'a','b','c','\0'};
	char arr2[] = { 'a','b','c' };
	char arr3[4] = { 'a','b','c' };
	char*str = "abc";
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	printf("%d\n", strlen(arr3));
	printf("%d\n", strlen(str));
	return 0;
}

解释:

(1)strlen函数是计算'\0'前的元素个数,此时arr1数组有4个空间,有'\0','\0'前面有3个元素。

(2)此时arr2数组有3个空间,没有'\0',所以就产生了一个随机数。

(3)此时arr3数组有4个空间,前面3个空间放的是"abc",最后一个空间系统添加了一个'\0'。

(4)指针变量指向字符串"abc"等价与"abc\0"。

注意:

(1)strlen(包括strcmp strcpy strcat等)函数是用于字符串的,而不是整型数组的。

(2)strlen函数是计算'\0'前的字符个数,即有效字符的个数。

b.代码2

int main()
{
	char* str1 = "abc";
	char* str2 = "abcd";
	if (strlen("abc") < strlen("abcd"))
	{
		printf("aa\n");
	}
	else
	{
		;
	}
	if (strlen(str1) - strlen(str2) > 0)
	{
		printf("aa\n");
	}
	else
	{
		;
	}
	return 0;
}

解释:

(1)strlen的返回值是无符号的整型(unsigned int),所以(strlen(str1) - strlen(str2))最终的值也是无符号的,即>=0。

注意:

(1)一定要引头文件<string.h>,不然结果就只有一个"aa"

3.sizeof与strlen函数对比

a.代码1

int main()
{
	char arr1[] = { 'a','b','c' };//3个空间,没有字符'\0'
	char arr2[] = "abc";//4个空间,字符'c'后面默认跟一个'\0'
	char arr3[] = "a\0bc";
	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));
	printf("%d\n", sizeof(arr3));
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	printf("%d\n", strlen(arr3));
	return 0;
}

解释:

(1)sizeof是计算大小的,strlen是计算'\0'前的字符个数的。?

4.strcmp函数

a.代码1

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abc";
	char arr3[] = "bcd";
	printf("%d\n", strcmp(arr1, arr2));
	printf("%d\n", strcmp(arr1, arr3));
	return 0;
	
}

解释:

(1)两个字符串比较,就是字符逐个比较,直到发现不匹配为止。

注意:

(1)两个字符串进行比较时,如果arr1等于arr2,strcmp返回零。arr1小于arr2,strcmp返回一个小于零的数(不一定是-1)。arr1大于arr2,strcmp返回一个大于零的数(不一定是1)。

(2)进行两个字符串比较时,一定要有'\0'。

b.代码2

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abc";
	if (strcmp(arr1, arr2))
	{
		printf("aa");
	}
	else
	{
		printf("bb");
	}
	return 0;
}

?

注意:

(1)不要把代码解读成arr1与arr2相等,结果为真,执行if语句。此时的strcmp的返回值是0,所以执行else语句。

5.strncmp函数

a.代码1

?
int main()
{
	char* str1 = "abc";
	char* str2 = "abcd";
	printf("%d\n", strncmp(str1, str2, 2));
    printf("%d\n", strncmp(str1, str2, 4));
	return 0;
}

?

解释:

(1)选择需要比较的个数,返回值和strcmp一样。

int strncmp( const char *string1, const char *string2, size_t count );

6.strcpy函数

a.代码1

int main()
{
	char dest[] = "abc";
	char* src = "de";//"de"等价于"de\0"
	printf("%s", strcpy(dest, src));
	return 0;
}

?解释:

(1)

char *strcpy( char *strDestination, const char *strSource );

将src字符串的副本(所以src是不能改变的),拷贝到到dest(所以dest是可以改变的),返回dest的地址?。

(2)"de"字符串后面是有'\0'的,当再次读取dest时,字符'c'是无效字符。

(3)拷贝后的结果

注意:

(1)数组dest是可以改变的,一定不是字符串常量,即char*dest="abc";

(2)src一定要以'\0'结尾,不然程序会崩溃的。

(3)保证dest的空间足以容纳拷贝过来的字符串,不然会导致溢出。

b.代码2

int main()
{
	char dest[4] = "abc";
	char* src = "efgh";
	printf("%s", strcpy(dest, src));
	return 0;
}

?

?解释:

(1)dest的空间只有4个,拷贝过去的字符有5个("efgh"=="efgh\0"),即使最终的结果能打印出来,但是dest周围的栈空间破坏了。

7.strncpy函数

a.代码1

int main()
{
	char dest[] = "abcde";
	char* src = "fgh";
	printf("%s\n", strncpy(dest, src, 5));
	return 0;
}

解释:

(1)

char *strncpy( char *strDest, const char *strSource, size_t count );

strncpy函数最后一个参数(count)是控制拷贝到dest里面的字符个数。当count大于src字符串个数时,数组dest将用'\0'填充到count。

b.代码2

int main()
{
	char dest[] = "abcde";
	char* src = "fgh";
	printf("%s\n", strncpy(dest, src, 2));
	return 0;
}

解释:

(1)src的字符个数大于count ,就拷贝count个字符到dest。

8.strcat函数

a.代码1

int main()
{
	char dest[7] = "abc";
	char*src = "def";
	printf("%s", strcat(dest, src));
	return 0;
}

?解释:

(1)将字符串"def"(等价于"def\0")追加到dest后面。

(2)返回值为字符数组dest的地址。

注意:

(1)保证dest剩余的空间,足以容纳下追加的字符串,否则会出现溢出的情况。

(2)字符数组dest可以改变,src指向的字符串不可以改变。

9.strncat函数

a.代码1

int main()
{
	char dest[7] = "abc";
	char*src = "def";
	printf("%s", strncat(dest, src,2));
	return 0;
}

解释:

(1)在dest后面追加2个字符,即"de"?("de"后面有一个'\0',作为结束标志)。

(2)返回值为数组dest的地址。

注意:

(1)保证dest剩余的空间,足以容纳下追加的字符,否则会出现溢出的情况。

(2)字符数组dest可以改变,src指向的字符串不可以改变。

? ? ?字符串函数与sizeof的使用今天就分享到这里了,如果对你有帮助的话,可以给个关注,随便给个赞。

??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:25:37  更:2021-11-14 21:25:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:51:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码