| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 字符函数和字符串函数 -> 正文阅读 |
|
[游戏开发]字符函数和字符串函数 |
一、函数介绍 1、strlen 特点:
(1)、字符串的结束标志是‘\0’,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
含
'\0'
);
(2)、函数传参的内容是字符指针 char *,返回值是 size_t(无符号);
(3)、参数指向的字符串必须以‘\0’结束。
strlen函数的模拟实现
2、strcpy——字符串拷贝(返回目标空间的起始地址)
?特点:
(1)源字符串必须以
'\0'
结束;
(2)该函数会将源字符串中的
'\0'
拷贝到目标空间之中;
(3)目标空间必须足够大,以确保能存放源字符串;
(4)目标空间必须可变。
strcpy函数的模拟实现
3、
strcat——字符串追加
?特点:
(1)源字符串必须以
'\0'
结束;
(2)目标空间必须有足够的大,能容纳下源字符串的内容;
(3)目标空间必须可修改。
(4)追加时,会把目标字符串最开始的'\0'覆盖了
strcat函数的模拟实现
?那么能不能自己对自己追加呢?——不能,会导致死循环 ?因为前面所说,追加时,会把目标字符串最开始的'\0'覆盖了,而目标字符串就是源字符串,这时就和第(1)条源字符串必须以 '\0' 结束矛盾,所以不能。 4、strcmp——字符串比较
标准规定:
(1)第一个字符串大于第二个字符串,则返回大于
0
的数字;
(2)第一个字符串等于第二个字符串,则返回
0;
(3)第一个字符串小于第二个字符串,则返回小于
0
的数字。
特点:比较的不是字符串的长度,而是比较的时字符串对应位置上的字符大小,如果相同,就比较下一对,直到不同或者遇到‘\0’。
?strcmp函数的模拟实现
前面所说的字符串函数都是长度不受限制的字符串函数——strcpy、strcat、strcmp 而接下来所说的时长度受限制的字符串函数——strncpy、strncat、strncmp 5、strncpy
char *
strncpy
(
char *
destination
,
const
char *
source
,
size_t
num
);
(1)拷贝
num
个字符从源字符串到目标空间。
(2)如果源字符串的长度小于
num
,则拷贝完源字符串之后,在目标的后边追加
0
,直到
num
个。
6、strncat
char *
strncat
(
char *
destination
,
const
char *
source
,
size_t
num
);
(1)追加了num个字符后,还会在目标字符串后再追加一个'\0'。
7、strncmp
int
strncmp
(
const
char *
str1
,
const
char *
str2
,
size_t
num
);
(1)比较到出现其中一个字符不一样或者其中一个字符串结束或者num个字符全部比较完。
8、strstr——看一个字符串是否为另一个字符串的字串?
(1)如果是子串,则返回的是源字符串中子串的起始地址;如果不是,则返回空指针。
strstr函数的模拟实现
9、strtok——切割
char *
strtok
(
char *
str
,
const
char *
sep
);
(1)sep
参数是个字符串,定义了用作分隔符的字符集合
(2)第一个参数指定一个字符串,它包含了0
个或者多个由
sep
字符串中一个或者多个分隔符分割的标记。
(3)
strtok
函数找到
str
中的下一个标记,并将其用
\0
结尾,返回一个指向这个标记的指针(注:
strtok
函数会改变被操作的字符串,所以在使用
strtok
函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
(4)strtok函数的第一个参数不为
NULL
,函数将找到
str
中第一个标记,
strtok
函数将保存它在字符串 中的位置。
(5)strtok函数的第一个参数为
NULL
,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。 如果字符串中不存在更多的标记,则返回 NULL
指针。
10、strerror——返回错误码所对应的错误信息 ?字符分类函数:
?字符转换:
int
tolower
(
int
c
); //转小写
int
toupper
(
int
c
); //转大写
? 内存操作函数 memcpy ;memmove ; memcmp ;memset? 11、memcpy
void *
memcpy
(
void *
destination
,
const
void *
source
,
size_t
num
);
(1)函数
memcpy
从
source
的位置开始向后复制
num
个字节的数据到
destination
的内存位置。
(2)这个函数在遇到 '\0'
的时候并不会停下来。
(3)如果source
和
destination
有任何的重叠,复制的结果都是未定义的。
?memcpy的模拟实现
12、memmove——重叠内存拷贝
void *
memmove
(
void *
destination
,
const
void *
source
,
size_t
num
);
(1)和
memcpy
的差别就是
memmove
函数处理的源内存块和目标内存块是可以重叠的。
(2)如果源空间和目标空间出现重叠,就得使用
memmove
函数处理。
??memmove的模拟实现
这里有一点要注意的,如果dest<src,那么src要从前向后拷贝到dest中,如果dest>src,则要从后向前拷贝。因为不这样可能会导致要拷贝的部分被覆盖。
13
memcmp——内存比较
int
memcmp
(
const
void *
ptr1
,
const
void *
ptr2
,
size_t
num
);
(1)比较从
ptr1
和
ptr2
指针开始的
num
个字节
14memset——内存设置 以字节为单位来初始化,会改动每个字节,而不是每个元素 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 18:36:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |