C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数

本文主要是介绍C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、strcpy的使用和模拟实现

(一)strcpy使用

//strcpy的使用
#include <stdio.h>int main()
{char arr1[] = "abcdef";char arr2[10] = "qwertt";char arr3[10] = "okl";strcpy(arr2, arr1);printf("arr2 = %s\n", arr2); strcpy(arr2, arr3);printf("arr1 = %s\narr2 = %s\narr3 = %s", arr1,arr2,arr3);return 0;
}

(二)strcpy使用的注意事项

• 注意strcpy需要包含的头文件是 <string.h>

• 源字符串必须以 '\0' 结束,会将源字符串中的 '\0' 拷贝到目标空间。

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

• 目标空间必须可修改。

•strcpy函数返回的是目标空间的起始地址

如下例,字符中的'\0'也会同样被赋值进目标空间。

#include <stdio.h>int main()
{char arr1[] = "xxxxxxxxxx";char arr2[] = "abc";strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

当源字符串空间大于目标空间时,使用strcpy函数会有怎样的结果?

系统会报错。

#include <stdio.h>
#include <string.h>
int main()
{char arr1[] = "xxxxxxxxxx";char arr2[] = "abc";strcpy(arr2, arr1);printf("%s", arr2);return 0;
}

(三)strcpy的模拟实现

strcpy函数返回的是目标空间的起始地址

strcpy函数的返回类型的设置是为了实现链式访问

#include <stdio.h>
#include <string.h>
#include <assert.h>char *my_strcpy(char* str1, const char* str2)
{assert(str1 && str2);while (*str2){*str1 = *str2;++str1;++str2;if (*str2 == '\0')*str1 = *str2;}return str1;
}int main()
{char arr1[] = "abcdef";char arr2[] = "qwert";my_strcpy(arr1,arr2);printf("%s", arr1);return 0;
}

进行优化

#include <stdio.h>
#include <string.h>
#include <assert.h>char* my_strcpy(char* str1, const char* str2)
{assert(str1 && str2);while (*str1++ = *str2++){;}return str1;
}int main()
{char arr1[] = "abcdef";char arr2[] = "qwert";my_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

二、strcat的使用和模拟实现

(一)strcat使用

#include <stdio.h>
#include <string.h>int main()
{char arr1[20] = "abcdef";char arr2[] = "poiuy";strcat(arr1, arr2);printf("arr1=%s\narr2=%s", arr1, arr2);return 0;
}

(二)strcat使用的注意事项

  • 注意strcpy需要包含的头文件是 <string.h>
  • 源字符串必须以 '\0' 结束。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

(三)strcat的模拟实现

#include <stdio.h>
#include <assert.h>char* my_strcat(char* dest, char* src)
{assert(dest && src);char* ret = dest;while (*dest)//找目标字符串中的'\0'{dest++;}while (*dest++ = *src++)//附加字符串{;}return ret;
}int main()
{char arr1[20] = "asdfg";char arr2[] = "mnbvc";my_strcat(arr1, arr2);printf("%s", arr1);return 0;
}

(四)字符串自身附加

#include <stdio.h>
#include <assert.h>char* my_strcat(char* dest, char* src)
{assert(dest && src);char* ret = dest;while (*dest)//找目标字符串中的'\0'{dest++;}while (*dest++ = *src++)//附加字符串{;}return ret;
}int main()
{char arr[20] = "asdfg";my_strcat(arr, arr);printf("%s", arr);return 0;
}

存在错误,自身附加自身的字符串时,字符串的'\0'很容易被覆盖。

三、strcmp的使用和模拟实现

(一)strcmp使用

#include <stdio.h>
#include <string.h>
int main(){char arr1[] = "asdfgh";char arr2[] = "ascfgh";char arr3[] = "asdfghj";char arr4[] = "asdfghj";int ret1 = strcmp(arr2, arr1);int ret2 = strcmp(arr3, arr1);int ret3 = strcmp(arr2, arr3);int ret4 = strcmp(arr4, arr3);printf("%d %d %d %d", ret1, ret2, ret3,ret4);return 0;
}

(二)strcmp使用的注意事项

  • 此函数开始比较每个字符串的第一个字符。如果它们彼此相等则继续比较后续的字符相应,直到字符不同或终止达到null字符。
  • 标准规定
    • 第一个字符串大于第二个字符串,则返回大于0的数字
    • 第一个字符串等于第二个字符串,则返回0
    • 第一个字符串小于第二个字符串,则返回小于0的数字

(三)strcmp的模拟实现


#include <stdio.h>
#include <assert.h>int* my_strcmp(char* s1, const char* s2)
{assert(s1 && s2);while (*s1 == *s2){if(*s1 == '\0')return 0;s1++;s2++;}if (*s1 > *s2)return 1;elsereturn -1;
}int main()
{char arr1[] = "asdfgh";char arr2[] = "asdfg";int ret = my_strcmp(arr1, arr2);printf("%d", ret);return 0;
}

这篇关于C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576646

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N