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语言】字符串和内存函数(一) -> 正文阅读

[C++知识库]【C语言】字符串和内存函数(一)

1、长度不受限制的字符串函数

1.1、strlen函数

size_t strlen(const char* str);

1、sizeof — 操作符 — 计算大小的,sizeof返回的类型是size_t,而size_t本质上是unsigned int类型

//模拟实现strlen
#include <stdio.h>
#include <string.h>
#include <assert.h>
int my_strlen(const char* str)
{
	assert(str);//断言str不是空指针
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	int len = my_strlen("abcdef");
	printf("%d\n", len);
	return 0;
}

2、字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’前面出现的字符个数,不包含’\0’

3、参数指向的字符串必须以 ‘\0’ 结束

1.2、strcpy函数

1、源字符串必须以 ‘\0’ 结束(源字符串即被拷贝的字符串)

2、strcpy函数会将源字符串中的 ‘\0’ 拷贝到目标空间

3、目标空间必须足够大,以确保能存放源字符串

4、目标空间必须可变(举反例)

//错例,代码不能这样写!!!
#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdef";
	const char* p = "xxxxxxxx";
	//此时指针变量p被const修饰,p指向的内容不能改变,所以是错的
	strcpy(p, arr1);
	printf("%s\n", p);
	return 0;
}

5、模拟实现strcpy函数

#include <assert.h>
#include <stdio.h>
//模拟实现strcpy函数
char* my_strcpy(char* dest,const char* src)
{
	char* ret = dest;
	assert(dest && src);//断言两个都不为空指针
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[] = { 'a','b','c','d','e','f','\0' };
	char arr2[20] = "xxxxxxxxxx";
	my_strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

1.3、strcat函数

1、将字符串中的内容追加到 目的字符串 后面
2、目标空间必须足够大,能容纳下源字符串的内容
3、追加的字符串后必须要有’\0’
4、目标字符串后必须要有’\0’
5、目标空间必须可修改
6、模拟实现strcat函数
在这里插入图片描述

1.4、strcmp函数

1、字符串比较(比较的是对应位置上的字符大小)
2、比较的是对应字符位置的ASCII码值
3、模拟实现strcmp函数
在这里插入图片描述

2、长度受限制的字符串函数

2.1、strncpy函数

使用例子

#include <stdio.h>
int main()
{
	char arr1[] = "xxxxxxxxxxxxxxxx";
	char arr2[] = "hello world";

	strncpy(arr1, arr2, 5);
	printf("%s\n", arr1);
	return 0;
}

2.2、strncat函数

用例

int main()
{
	char arr1[20] = "hello";
	char arr2[] = "world";
	strncat(arr1, arr2, 5);
	printf("%s\n", arr1);
	return 0;
}

2.3、strncmp函数

用例

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcqqqqq";
	int ret = strncmp(arr1, arr2, 4);
	printf("%d\n", ret);
	return 0;
}

3、strstr函数

1、作用是在字符串中查找目标字符串,下面是用例

#include <assert.h>
#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdefabcdef";
	char arr2[] = "bcd";

	char* ret = strstr(arr1, arr2);
	if (NULL == ret)
	{
		printf("没找到\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

2、模拟实现strstr函数
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

小知识

1、指针不知道赋什么值的时候,就给NULL
2、指针使用完后,赋值NULL
3、链式访问(举例)
4、两个字符串不能直接用等号比较,也不能相减,因为使用两个字符串时,产生的是两个字符串的首地址

int main()
{
   int len = strlen("abcdef");
   printf("%d\n",strlen("abcdef"));
   return 0;
}

错例

//错误代码,请勿模仿
int* test()
{
   int a = 10;
   return &a;
}

int main()
{
   int* p = test();
   *p = 20;//形成非法访问
   //因为函数中的临时变量申请的空间
   //在出函数的时候就被销毁了
   //所以会形成非法访问
   return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:17:37  更:2022-04-22 18:20:52 
 
开发: 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/23 22:31:49-

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