今天我在写完代码后,想起strcpy这个库函数,经过查阅,自己总结出来一点,也顺便再写一遍strcpyh函数,也是让自己练习练习。
先来了解strcpy函数的功能,strcpy是将src地址(源)开始到'\0',包括'\0'的字符串拷贝到dst地址(目的)中去。
来看具体代码
char *strcpy(char *dst,const char *src)
{
char *d = dst;//保存目的首地址
assert((dst != NULL) && (src != NULL));//断言
while(*dst++ = *src++)//把dst指针的内容一个一个赋值给src所指向的空间
{ //因为后置++所以先赋值后++,到\0,因为\0的ASCII码值为0,等于0就跳出循环
;
}
return d;
}
这是库函数,那么咱们来实验一下,自己的写一个主要函数
int main()
{
char arr[20] = {0};
strcpy(arr,"hello world");
printf("%s",arr);
return 0;
}
strncpy库函数的实现
strncpy是在strcpy的基础上加上了拷贝的个数n,所以实现起来很简单,但是要注意的是:
如果当拷贝的字符个数n小于要拷贝的src的字符个数,在库函数中,是没有加上'\0'的。
如果要拷贝的个数n大于src字符的个数,这时候拷贝至'\0'即可。
代码:
#include <stdio.h>
#include <assert.h>
#include <string.h>
char* Strncpy(char* dst, char* src, size_t n)
{
assert(dst != NULL || src != NULL);
if (n >= strlen(src))
{
while (n&&(*dst++ = *src++) != '\0')
{
--n;
}
}
else
{
while (n--)
{
*dst++ = *src++;
}
//*dst = '\0';
}
return dst;
}
代码中const 用法:
被const修饰的是常量不能改变,但能通过指针修改内容。
修饰指针指针不能改变,但指针所指向的内容可以改变。。