【C语言】strcpy与strncpy函数的使用和模拟实现

【C语言】strcpy与strncpy函数的使用和模拟实现

一.strcpy的使用与模拟实现 char* strcpy(char * destination, const char * source );

使用注意事项:

• 源字符串必须以 '\0' 结束。

• 会将源字符串中的 '\0' 拷贝到目标空间。

• 目标空间必须足够大,以确保能存放源字符串。

• 目标空间必须可修改。

代码语言:javascript代码运行次数:0运行复制#include

#include

int main()

{

char dest[10];

const char *src = "hello";

strcpy(dest, src);

printf("复制的字符串:'%s'\n", dest);

return 0;

}模拟实现:

代码语言:javascript代码运行次数:0运行复制char *my_strcpy(char *dest, const char*src)

{

char *ret = dest;

assert(dest != NULL);

assert(src != NULL);

while((*dest++ = *src++))

{

;

}

return ret;

} strcpy 不检查目标缓冲区的大小,因此如果目标缓冲区不够大,可能会导致缓冲区溢出,这是一个严重的安全风险。建议使用 strncpy并指定最大复制长度,以避免这种风险。

二.strncpy的使用与模拟实现 char * strncpy ( char * destination, const char * source, size_t num );

使用注意事项:

拷贝num个字符从源字符串到目标空间。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

代码语言:javascript代码运行次数:0运行复制#include

#include

int main()

{

char dest[10];

const char *src = "hello world";

strncpy(dest, src, 5);

dest[5] = '\0'; // 注意:必须手动添加终止空字符

// 现在 dest 是 "hello"

return 0;

}模拟实现

代码语言:javascript代码运行次数:0运行复制char *my_strncpy(char *dest, const char *src, size_t n) {

char *dest_save = dest;

while (n && *src) {

*dest++ = *src++;

n--;

}

while (n--) {

*dest++ = '\0'; // 如果 n 大于 src 字符串的长度,填充剩余位置为空字符

}

return dest_save;

}

相关推荐

bt365备用网站 已经注册的学信网账号为何无法成功登录?
365bet亚洲投注 冰岛世界杯服装 冰岛世界杯2022
365bet亚洲投注 汽车大灯怎么拆下来?汽车大灯灯泡怎么拆下来图解