目录
引言:
一、strcpy函数介绍:
1.声明:
2.功能:
3.底层代码:
4.实现代码:
二、strcat函数介绍:
1.声明:
2.功能:
3.底层代码:
4.实现代码:
三、strcmp函数介绍:
1.声明:
2.功能:
3.标准规定:
4.底层源码:
5.实现代码:
总结:
在计算机编程中,字符串是一种基本的数据类型,用于存储和处理文本信息。在进行字符串操作时,经常需要进行复制、拼接和比较等操作。为此,C语言提供了一系列字符串函数,其中包括strcpy、strcat和strcmp三个函数,它们分别用于字符串复制、字符串拼接和字符串比较。本文将介绍这三个函数的功能和使用方法。
strncpy、strncat和strncmp函数功能的实现请查看博客:
字符串函数strncpy、strncat、strncmp的功能(3)-CSDN博客
char * strcpy ( char * destination, const char * source );
复制字符串
将原指向的字符串复制到目标指向的数组中,包括终止null字符(并在该点处停止)。
(为避免溢出,目标指向的数组的大小应该足够长,从而足够包含于原指向字符串(包括终止null字符),并且不应在内存中与原字符串重叠)
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while((*cp++ = *src++) != '\0')
; /* Copy src over dst */
return( dst );
}
#include
#include
char* prayer_strcpy(char* dest, char* src) {
assert(dest != NULL);
assert(dest != NULL);
char* ret = dest;
while(*src != '\0') {
*dest++ = *src++;
}
*dest = *src;//结束符'\0'拷贝到dest
return ret;
}
int main() {
char arr1[] = "Paryer";
char arr2[] = "Star";
prayer_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
char * strcat ( char * destination, const char * source );
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
char * __cdecl strcat (
char * dst,
const char * src
)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while((*cp++ = *src++) != '\0') ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
#include
#include
#include
char* prayer_strcat(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*dest != '\0') {
dest++;
}
/*while (*src!='\0') {
*dest++ = *src++;
}*/
while (*dest++ = *src++) {
;
}
return ret;
}
int main() {
char arr1[15] = "Star";
char arr2[15] = "Prayer";
prayer_strcat(arr1,arr2);
printf(arr1);
return 0;
}
int strcmp ( const char * str1, const char * str2 );
从str1与str2的开头依次比较相对应的每一个字符;
如果它们彼此相等,则继续往后比对,直至字符不同或到达终止字符null。
此函数执行字符的二进制比较;
如果需要规定区域比对,strcoll函数或许可以帮到你,本文不会对此进行赘述。
返回一个整数值,该值用来表示字符串之间的关系:
返回值 | 表明 |
<0 | 第一个不匹配的字符在str1中的值小于str2的值 |
0 | 两个字符串内容相等 |
>0 | 第一个不匹配的字符在str1中的值大于str2的值 |
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
{
++src, ++dst;
}
return ((-ret) < 0) - (ret < 0); // (if positive) - (if negative) generates branchless code
}
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
int prayer_strcmp(const char* str1, const char* str2) {
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2) {
if (*str1 == '\0') {
return 0;
}
}
if (*str1 > *str2) {
return 1;
}
else
return -1;
}
int main() {
const char* p1 = "Star";
const char* p2 = "Prayer";
int ret = prayer_strcmp(p1, p2);
printf("%d\n", ret);
return 0;
}
总的来说,strcpy、strcat和strcmp是C语言中常用的字符串函数,它们为字符串操作提供了便捷的方式。通过掌握这三个函数的使用方法,程序员可以更加轻松地处理字符串数据,提高编程效率。然而,在使用这些函数时,也需要注意一些细节问题,比如函数的返回值、参数类型和内存溢出等问题。只有充分理解这些函数的内部原理和用法,才能更好地利用它们为程序开发服务。