strcpy和strncpy

Posted hzxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strcpy和strncpy相关的知识,希望对你有一定的参考价值。

当我们在使用strcpy()时,是否有考虑过当源字符串的空间大于目标字符串的空间会出现什么样的情况:以下我作了一个简单的案例:

#include <stdio.h>
#include <string.h>

int main() 
    char *obj="Hello World!";
    char dest[5]=0;
    
    
    strcpy(dest,obj);
    printf("%s\n",dest);

    return 0;

当用gcc编译执行后,出现了段错误.这显然是很危险的,所以libc中还有一种更为谨慎的字符串拷贝函数strncpy(),继续做一个案例:

#include <stdio.h>
#include <string.h>

int main() 
    char *obj="Hello World!";
    char dest[5]=0;

    strncpy(dest,obj,sizeof(dest)-1);
    printf("%s\n",dest);

    return 0;

编译执行后输出的结果是: hell也没有出现了段错误,所以当需要使用到字符串拷贝的时候,优先使用strncpy()是一种更不错的选择.这里有一个细节需要注意,需要留出1个单位的空间来存放‘\0‘,所以在第三个参数我使用sizeof(dest)-1,这里如果不-1,则还是会出现段错误,因为字符串是以\0标志结束的,所以一定要留一个空间. 

 

以上是关于strcpy和strncpy的主要内容,如果未能解决你的问题,请参考以下文章

strcpy&memcpy理解

strcpy... 想用 strcpy_mine 替换,它将 strncpy 和 null 终止

strcpy()函数和strcmp()函数怎么用?

strcpy和memcpy的区别

c 语言 strcpy

码海拾遗:strcpy()strncpy()和strcpy_s()区别