strcpy和strncpy
Posted zsQgqdsd1002
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strcpy和strncpy相关的知识,希望对你有一定的参考价值。
strcpy
我们先来看看在msdn中是如何解释这个函数的:
char *strcpy( char *strDestination, const char *strSource );
The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination.
strcpy函数将strSource(包括终止的空字符)复制到strDestination指定的位置。
这里有几点需要注意:
1. 源字符串必须以'\\0'作为结尾
2. strcpy函数会将源字符串中的'\\0'也拷贝至目标空间
3. 目标空间必须足够大,至少要大于等于源字符串所占空间
4. 目标空间必须是也变的,也就是说不可以是常量字符串
那么知道了这些,我们就来模拟实现一下strcpy函数:
char *MyStrcpy(char* dst, const char* src)
{
char* p = dst;
assert(dst && src);//断言dst和src都不为空
while (*src != '\\0')
{
*dst = *src;
src++;
dst++;
}
*dst = '\\0';
return p;
}
int main()
{
char arr[20] = "abcdef";//保证目标空间足够大
const char* arr1 = "zxcvbn";
char* ret = MyStrcpy(arr,arr1);
printf("%s", ret);
return 0;
}
我们来看一下程序的输出结果:
非常的完美
strncpy
char *strncpy( char *strDest, const char *strSource, size_t count );
The strncpy function copies the initial count characters of strSource to strDest and returns strDest. If count is less than or equal to the length of strSource, a null character is not appended automatically to the copied string. If count is greater than the length of strSource, the destination string is padded with null characters up to length count.
strncpy函数将strSource的初始计数字符复制到strDest并返回strDest。如果count小于或等于strSource的长度,则不会将空字符自动附加到复制的字符串中。如果count大于strSource的长度,则目标字符串将填充长度count以内的空字符。
这里需要解释的是:
1.strncpy是从源字符串中拷贝count个元素到目标空间中
2.如果源字符串的长度小于count,那么就在后面一直追加0直到count个
同样的我们来模拟实现一下strncpy函数:
char* MyStrncpy(char* dst, const char* src, size_t count)
{
char* p = dst;
const char* q = src;
assert(dst && src);
if (count < strlen(src) + 1)
{
while (*src != *(q + count))
{
*dst = *src;
src++;
dst++;
}
return p;
}
else
{
while (*src != '\\0')
{
*dst = *src;
src++;
dst++;
}
for (size_t i = 0; i < (count - strlen(src)); i++)
{
*(dst + i) = '\\0';
}
return p;
}
}
int main()
{
char arr[20] = "abcdefqwerty";
const char* arr1 = "zxcvbn";
char* ret = MyStrncpy(arr, arr1, 3);
printf("%s", ret);
return 0;
}
我们来看一下程序的输出结果:
非常的完美。
以上就是我今天想分享给大家的内容,如果有错误的或者可以改进的地方,欢迎大佬联系我。
以上是关于strcpy和strncpy的主要内容,如果未能解决你的问题,请参考以下文章