strcpy(字符串拷贝)
原型:
头文件:#include< string.h >
参数: 第一个参数为:目标字符串。第二个参数为源字符串。
返回类型:char*。
作用: 把源字符串(strSource)拷贝到目标字符串(strDestination)上。
注意事项:1. 目标空间必须足够大且可以被修改;2. 源字符串中必须有‘\0’;3. 源字符串不可以被修改。
参考代码(库函数实现):
#include<stdio.h>
#include<stdlib.h>
int main()
{
const char p[] = "abcd"; //源字符串中有‘\0’,且不能被改
char s[20]={0}; //目标空间足够大
strcpy(s, p);
printf("%s\n", s);
system("pause");
return 0;
}
运行:
模拟实现strcpy
代码:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char * my_strcpy(char *dest,const char *src)
{
char *ret = dest;
assert(src); //断言,若字符串为空则不执行下面的代码
assert(dest); //断言,若字符串为空则不执行下面的代码
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
const char p[] = "abcdef"; //源字符串中必须有‘\0’
char s[20]={0}; //目标空间必须足够大
char*ret=my_strcpy(s, p);
printf("%s\n", ret);
system("pause");
return 0;
}
运行:
strncpy(长度受限制的字符串拷贝)
原型:
里面的count是指:
即复制多少个。
头文件:#include< string.h>
参数:第一个参数为:目标字符串。第二个参数为源字符串。第三个参数为无符号的整形数。
返回类型:char*。
作用:把源字符串(strSource)中的count个字符拷贝到目标字符串(strDest)中。
注意事项:目标空间必须足够大且可以被修改,源字符串不可以被修改,如果源字符串的长度小于count个,则拷贝完有效字符串之后,在目标后面追加一个\0。
参考代码(库函数实现):
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char arr[] = "abcdefghi";
char *ret=strncpy(arr, "pppp",4);
//char *ret=strncpy(arr, "pppp",7);
printf("%s\n", ret);
system("pause");
return 0;
}
运行(源字符串的长度大于等于count):
运行(源字符串的长度小于count):
模拟实现strncpy
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strncpy(char *dest, const char *src, size_t count)
{
char *ret = dest;
assert(dest);//断言,如果为空指针,则不执行后面的语句。
assert(src); //断言,如果为空指针,则不执行后面的语句。
while (count--) //执行count次循环
{
if (*src != '\0') //count<源字符串长度,拷贝字符串
{
*dest = *src;
src++;
dest++;
}
else //count>源字符串长度,拷贝完字符串之后,
{
*dest = '\0';//在目标后面追加0
return ret;
}
}
return ret;
}
int main()
{
char arr[] = "abcdefghi";
char *ret = my_strncpy(arr, "pppp", 3);
//char *ret = my_strncpy(arr, "pppp", 7);
printf("%s\n", ret);
system("pause");
return 0;
}
运行(源字符串的长度大于等于count):
运行(源字符串的长度小于count):