字符串函数内部原理(附带源码): str(n)py, str(n)cat, str(n)cmp
链接: https://pan.baidu.com/s/1mHanv57cP6YeX0pOE6uQPg 提取码: 1111。strcmp的返回值是两个字符的ASCII差值. 这里, return: '\0' - '\0' ,即返回0.如图, 将10个字符复制到"str2, "str2"的剩余空间用'0'填充。返回负数-100('d'与'\0'的差值为100)若要打印正常的字符串, 需要手动添加'\
strcpy实现
期望该函数满足以下要求:
1. 逐个字符复制:直到遇到字符串结束符'\0' 2. 自动添加字符串结束符
3. 返回值为源字符串(dest)的地址

进行测试:


strncpy实现
构建strcncpy函数:
期望该函数满足以下要求: 1. 复制字符,直到复制n个或送到'\0' 2. 用'/0'填充剩余空间
3. 返回值为源字符串(dest)的地址

下面进行测试.
测试用例分情况讨论:
情况1: "n" 小于"src"长度(指源字符串, 而不是地址,下文统称"src"):

如图, "str2"出现乱码, 这是因为在该函数在"src"未达到'\0'时, 不会自动添加'\0'.
因此, 对于空"dest", 若要打印正常的字符串, 需要手动添加'\0'
情况2: "n"大于"src"的长度:

如图, 将10个字符复制到"str2, "str2"的剩余空间用'0'填充
strcat实现
strcat的实现期望:
1. 找到目标字符串的末尾('\0'位置)
2. 从源字符串开始复制字符,直到遇到源字符串的'\0'
3. 在连接后的字符串末尾添加'\0'
4. 返回目标字符串的地址
测试:



strncat实现
strncat的实现期望:
1.找到目标字符串的末尾('\0'位置)
2.从源字符串复制最多n个字符到目标字符串末尾
3.如果源字符串长度小于n,复制完源字符串后停止
4.在连接后的字符串末尾添加'\0'
5.返回目标字符串的地址

分情况测试:
1."n''小于"src"长度:



2."n"大于"src"长度:


strcmp实现
strcmp的实现期望:
1.逐个字符比较两个字符串
2.当遇到字符不相等或遇到'\0'时停止比较
3.返回比较结果:
如果字符串相等,返回0
如果第一个字符串大于第二个字符串,返回正数
如果第一个字符串小于第二个字符串,返回负数

代码测试:
情况1: 两个字符串相同
/// a b c \0
/// a b c \0

strcmp的返回值是两个字符的ASCII差值. 这里, return: '\0' - '\0' , 即返回0.
情况2:两字符串比较过程中出现字符不相等的情况
/// a b c c \0
/// a b c d \0

返回值为负数-1('d'与'c'的差值为1)
情况3: 两字符串大部分字符相同, 但长度不一致
/// a b c \0
/// a b c d \0

返回负数-100('d'与'\0'的差值为100)
strcnmp实现
strncmp的实现期望:
1.逐个字符比较两个字符串,最多比较n个字符
2.当遇到字符不相等、遇到'\0'或比较完n个字符时停止
3.返回比较结果(规则与strcmp相同)

测试不同于strcpy的特殊情况:

源码:
通过网盘分享的文件:strcat&strncat.c等3个文件
链接: https://pan.baidu.com/s/1mHanv57cP6YeX0pOE6uQPg 提取码: 1111
更多推荐



所有评论(0)