我是靠谱客的博主 花痴枕头,最近开发中收集的这篇文章主要介绍C语言字符串库函数strcpy,strncpy,strcat,strncat,ctrcmp,strncmp的简介与实现一、C语言部分字符串库函数的介绍二、部分字符串库函数的模拟实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、C语言部分字符串库函数的介绍

1.strcpy函数的介绍

2.strncpy函数的介绍

3.strcat函数的介绍

4.strncat函数的介绍

5.strcmp函数的介绍

6.strncmp函数的介绍

7.总结

二、部分字符串库函数的模拟实现

1.strcpy函数的模拟实现

2.strcpy函数的模拟实现

3.strcat函数的模拟实现

4.strncat函数的模拟实现

5.strcmp函数的模拟实现

6.strncmp函数的模拟实现


一、C语言部分字符串库函数的介绍

1.strcpy函数的介绍

(1)函数声明为:char *strcpy( char *strDestination, const char *strSource );

(2)参数介绍:strDestination为目的地字符串的首元素地址,strSource为源头字符串的首元素地址

(3)返回值介绍:该函数返回值的类型为char*,返回值为目的地字符串的首元素的地址 

(4)功能简介:将strSource所指向的字符串复制到strDestination所指向的字符串中(包括)。

(5)例子:char arr1[20]="abcdefg";

               char arr2[]="hello";

               strcpy(arr1,arr2);

               则此时arr1[20]为"hello"。

(6)注意事项:1)arr1应为字符数组,不能是常量字符串,即目的字符串的内容要能够被修改。

                      2)arr1的长度要能够容纳复制进来的字符串。

                      3)复制时从源头字符串的第一个字符开始向目的字符串复制,直到遇到''时停止,                             并会将‘’复制

2.strncpy函数的介绍

(1)函数声明为:char *strncpy( char *strDest, const char *strSource, size_t count );

(2)参数介绍:strDest为目的地字符串的首地址,strSource为源头字符串的首地址,count为复制                          的长度(size_t为无符号整型,因为复制的长度不能为负值)。

(3)返回值介绍:该函数返回值的类型为char*,返回值为目的地字符串的首元素的地址。

(4)功能简介: 把str2的n个字符拷贝到str1里
                        strncpy 的特点:如果要拷贝的长度比源头字符串的长度还要长时,会用补全

(5)例子:char arr1[20]="abcdefghij";

               char arr2="hello";

               strncpy(arr1,arr2,3)执行后,arr1为"heldefghij"

               strncpy(arr1,arr2,8)执行后,arr1为"helloij"

(6)注意事项 : 1)arr1应为字符数组,不能是常量字符串,即目的字符串的内容要能够被修改。

                      2)arr1的长度要能够容纳复制进来的字符串。

                      3)复制时从源头字符串的第一个字符开始向目的字符串进行复制,直到长度达到                                 count时为止,若长度大于源头字符串的长度时用补齐(如上述例子中第二个)。

3.strcat函数的介绍

(1)函数声明:char *strcat( char *strDestination, const char *strSource );

(2)参数介绍:strDestination为目的地字符串的首元素地址,strSource为源头字符串的首元素地址

(3)返回值介绍:该函数返回值的类型为char*,返回值为目的地字符串的首元素的地址 

(4)功能简介:将strSource所指向的字符串连接在strDestination所指向的字符串后面。

(5)例子:char arr1[20]="abcdefg";

               char arr2[]="hijklmn";

               strcat(arr1,arr2)执行后,arr1[]="abcdefghijklmn"

(6)注意事项:1)arr1应为字符数组,不能是常量字符串,即目的字符串的内容要能够被修改。

                      2)arr1的长度要能够容纳连接后的字符串。

                      3)连接时是把strSource所指向的字符串的内容依次连接在strDestination所指向的字                           符串后面(连接的起始位置为strDestination指向的字符串中第一个''的位置),直                             到遇到''为止(包括字符'')。

                      4)将自己连接在自己后面不能使用该函数,因为在连接的过程中会覆盖字符''而                               找不到结束的位置

4.strncat函数的介绍

(1)函数声明:char *strncat( char *strDest, const char *strSource, size_t count );

(2)参数介绍:strDest为目的地字符串的首地址,strSource为源头字符串的首地址,count为连接                          的长度(size_t为无符号整型,因为复制的长度不能为负值)。

(3)返回值介绍:该函数返回值的类型为char*,返回值为目的地字符串的首元素的地址。

(4)功能简介:将源头字符串的count个字符连接在目的字符串后。

(5)例子:char arr1[20]="abcdef*********";

               char arr2[]="hijk";

               若strncat(arr1,arr2,3)执行后,aar1[20]="abcdefhij******"

               若strncat(arr1,arr2,7)执行后,arr1[20]="abcdefhijk*****"

(6)注意事项:1)arr1应为字符数组,不能是常量字符串,即目的字符串的内容要能够被修改。

                       2)arr1的长度要能够容纳连接后的字符串。

                       3)连接时是把strSource所指向的字符串的count个字符依次连接在目的字符串即                                  strDestination所指向的字符串后(起始位置为目的字符串第一个''的位置)。

                       4)连接时会自动在最后放一个'',即若连接字符长度count为2时,实际连接的是3个                            字符,第三个字符为'',因此自己连接自己时应该使用此函数。但若连接长度恰好                            为源头字符串的长度+1时,即末尾连接源字符串中的'',此时不会自己再补上一                            个''。如:源字符串为"abc",连接长度为4时,将字符串中的4个字符连接后,末                              尾已有来自于源字符串中的''时,就不会再补一个''了,即实际连接的字符串个                            数为4个,分别是'a','b','c',''

                       5)若连接长度count大于源头字符串的长度时,只会将源字符串中的字符连接到目的                              字符串后(包括''),而不会向strncpy函数那样用字符''补全。

                       6)上面所说源头字符串的长度均是用strlen函数所得到的长度,即只关心第个''的                              位置。如源字符串为"abchijk",连接长度为7时,只会连接4个字符。

5.strcmp函数的介绍

(1)函数声明:int strcmp( const char *string1, const char *string2 );

(2)参数介绍:string1与string2为要比较的两个字符串。

(3)返回值介绍:返回值的类型是一个有符号整型数据。

(4)功能简介:比较两个字符串的大小,通过字符串对应位置的字符的ASCII值来进行比较,直到确                        定两字符串的大小为止。当string1大于string2时,返回一个大于0的数,当string1小                        于string2时,返回一个小于0的数字,当string1=string2时,返回0。

(5)例子:char string1[]="abcdef";

               char string2[]="abcdefg";

               char string3[]="abchijkl";

               string1与string2进行比较时,一对一对的字符进行比较:'a'=='a','b'=='b',……'f'=='f',

               string1的最后一个字符''的ASCII值为0,小于string2的最后一个字符'g',所以string1小于                 string2,当调用函数strcmp(string1,string2)时会返回一个小于0的数字,同理当调用函数                 strcmp(string3,string2)时会返回一个大于0的数字,调用函数strcmp(string1,"abcdef")会                 返回0。

(6)注意事项:该函数的返回值在vs2013/vs2019环境下返回值为-1,0,1,但并不意味着大于时返回                        值只能为1,小于时返回值只能为-1。

6.strncmp函数的介绍

(1)函数声明:int strncmp( const char *string1, const char *string2, size_t count );

(2)参数介绍:string1和string2为要比较的字符串,count是无符号整型数,是要比较的字符的个数

(3)返回值介绍:返回值为有符号整型数据。

(4)功能介绍:此函数除了比较的字符为前count个字符外,其余与strcmp相同。

7.总结

(1)strcpy,strcat,strcmp为长度不受限制的函数,使用strcpy与strcat特别要注意长度,当长度太大在vs2013/vs2019环境下函数也能执行,会打印出结果,但是会由于非法访问内存而导致程序崩溃。

(2)strncpy,strncat,strncmp为长度受限制的字符串,其长度均为无符号整型数据。

(3)字符串复制(cpy),连接(cat)函数返回值均为目的字符串首字符的地址,比较(cmp)函数返回值为有符号整型。

(4)自己倍加时(即如str[10]="abc",要使str[10]="abcabc")要使用strncat函数。

二、部分字符串库函数的模拟实现

1.strcpy函数的模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* str1, const char* str2)
{
//保证接收到的指针不是空指针
assert(str1 != NULL);
assert(str2 != NULL);
char* str = str1;//记录目的字符串的起始位置
//把str2指向的内容拷贝到str1中,包括
while (*str1++=*str2++)
{
;
}
return str;
}

2.strcpy函数的模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* src, size_t count)//size_t表示无符号整型
{
assert(dest && src);
char* ret = dest;
//当count不为0时,且src不为时
//把src指向的值赋给dest所指向的值,并且src与dest同时--;count也--
//直到count=0,或src为为止
while (count && *src)
{
count--;
*dest++ = *src++;
}
if (count)//如果count不为0,继续拷贝并用补全
{
while (count)
{
*dest++ = '';
count--;
}
}
return ret;
}

3.strcat函数的模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
char* str = str1;//记录目的字符串的起始位置
while (*str1)//寻找目的字符串第一个''字符的位置
{
str1++;
}
while (*str1++ = *str2++)//将源字符串的内容复制到目的字符串中
{
;
}
return str;
}

4.strncat函数的模拟实现

#include<stdio.h>
#include<assert.h>
char* my_strncat(char* str1, const char* str2, size_t count)
{
assert(str1 && str2);
char* ret = str1;
//寻找字符串str1中的位置,从的位置连接字符串
while (*str1)
{
str1++;
}
//当count不为0并且str2的内容不为时
//将str2的内容赋值给str1所指向的内容
while (count && *str2!='')
{
*str1++ = *str2++;
count--;
}
//str2为,或count=0时;将当前str1所指向的内容的值修改为
*str1 = '';
return ret;
}

5.strcmp函数的模拟实现

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 || *str2)//当str1或str2的内容不是''时
{
if (*str1 == *str2)//如果当前一组字符相等,向后继续比较
{
str1++;
str2++;
}
else//若当前两字符不相等
{
//用str1所指向的字符减去str2所指向的字符,并返回
//若str1>str2,返回值大于0,否则返回值小于0
return *str1 - *str2;
}
}
//若前几组字符都相等,最后一组字符str1与str2的内容都是'',则两字符串相等,返回0
return 0;
}

6.strncmp函数的模拟实现

#include<stdio.h>
#include<assert.h>
int my_strncmp(const char* str1, const char* str2, size_t count)
{
assert(str1 && str2);
//当count不为0时,依次比较每一组字符
while (count--)
{
if (*str1 == *str2)//如果当前一组字符相等,向后继续比较
{
str1++;
str2++;
}
else//若当前两组字符不相等,比较结束,返回两字符的ASCII码的差值
return *str1 - *str2;
}
//若count==0,说明所比较的字符都相等,返回0
return 0;
}

最后

以上就是花痴枕头为你收集整理的C语言字符串库函数strcpy,strncpy,strcat,strncat,ctrcmp,strncmp的简介与实现一、C语言部分字符串库函数的介绍二、部分字符串库函数的模拟实现的全部内容,希望文章能够帮你解决C语言字符串库函数strcpy,strncpy,strcat,strncat,ctrcmp,strncmp的简介与实现一、C语言部分字符串库函数的介绍二、部分字符串库函数的模拟实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部