strcpy的使用和模拟
char* stecpy(char*destination,const char*source);
strcpy函数的功能是将source指向的内容拷贝到destination指向的内容里,返回类型是char*类型,头文件<string.h>。
注意:
- 源字符串必须以‘\0’结尾
- 会将源字符串中的‘\0’拷贝到目标空间
- 目标空间必须足够大,以确保能够存放字符串
- 目标空间必须可修改
使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdefg";
char arr2[20] = "0";
strcpy(arr2, arr1);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%c ", arr2[i]);
}
}
模拟
//模拟实现strncpy
char* my_strncpy(char* str1, const char* str2, int n)
{
char* ret = str1;
assert(str1 && str2);
while (n--)
{
if(*str2!='\0')
*str1++ = *str2++;
}
return ret;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = "0";
int n = 3;
my_strncpy(arr2, arr1, n);
printf("%s", arr2);
return 0;
}
strcat的使用和模拟实现
char*strcat(char*dest,consr char*stc);
strcat函数的功能是用于连接,追加字符串,将str指向的内容追加到dest指向的字符串后面,返回类型是char*类型,头文件<string.h>。
注意:
- 源字符串必须以‘\0’结尾
- 目标字符也应该有'\0',否则不知道从哪里开始追加
- 目标空间必须足够大,以确保能够存放字符串
- 目标空间必须可修改
使用
模拟实现
#include<stdio.h>
#include<string.h>
char* my_strcat(char* str1, const char* str2)
{
char* ret = str1;
while (*str1)//找到目标空间的'\0'
{
str1++;
}
while (*str1++ = *str2++)//从目标空间的'\0'之后开始拷贝
{
;
}
return ret;
}
int main()
{
char arr1[20] = "hello ";
char arr2[20] = "wold";
my_strcat(arr1, arr2);
printf("%s", arr1);
return 0;
}
strcmp的使用和模拟实现
int strcmp(consr char*str1,const char*str2);
strcmp函数的作用是比较两个字符串的大小,即ASCII值大小,返回类型是char*类型,头文件<string.h>。
标准规定:
- 第一个字符串大于第二个字符串,返回大于0的数字
- 第一个字符串等于第二个字符串,返回0
- 第一个字符串小于第二个字符串,返回小于0的数字
使用
模拟实现
#include<stdio.h>
#include<string.h>
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "bcde";
int n=my_strcmp(arr1, arr2);
printf("%d\n", n);
return 0;
}