目录
  • strcpy
    • 函数原型
    • 参数讲解
    • 返回值详解
  • 函数详解
    • 第二个注意点:目标空间必须足够大,以确保能存放源字符串
    • 第三个注意点:目标空间必须可变
  • 总结

    strcpy

    拷贝字符串到目标地址

    C语言的strcpy函数你了解吗

    函数原型

    char *strcpy( char * destination, const char * source )

    参数讲解

    参数 destination source
    解释 目标字符串地址 以 Null 结尾的源字符串地址

    返回值详解

    这些函数中的每一个都返回目标字符串,没有返回值就是拷贝失败。

    函数详解

    strcpy使用时几个注意点

     第一个注意点:源字符串必须以‘\0’结束,同时会将源字符串中的‘\0’拷贝到目标空间。

    就是说当我们把源字符串拷贝到目标地址时什么时候停止呢,就是当把源字符串中的‘\0’也拷贝过去时结束。

    用以下代码为例,就是说当arr2中f拷贝到arr1中时,strcpy还会把arr2中的‘\0’拷贝到arr1中

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char arr1[8];
    	char arr2[] = "abcdef";
     
    	strcpy(arr1, arr2);
     
    	printf("%s\n", arr1);
    	return 0;
    }

    C语言的strcpy函数你了解吗

     而如果arr2中没有‘\0’时,看如下图片所示,strcpy会越界访问直到程序崩溃!

     而当给arr2中添加'\0'时,程序就很容易就编译过去了 

    C语言的strcpy函数你了解吗

    所以在源地址中一定要存在'\0'

    第二个注意点:目标空间必须足够大,以确保能存放源字符串

    假如我们把arr2中的七个字符拷贝到arr1中去,遗憾的是arr1只有四个空间不够大,这时我们还调用strcpy,就会发现程序崩了!

    C语言的strcpy函数你了解吗

     为什么程序会崩了呢?原因很简单,就是‘装不下’,arr1的栈空间被破坏了。

    而作为程序员的我们,必须保证目标空间足够大,strcpy本身是不考虑这些问题的(很滑稽是不是,有一种你叫我干啥我干啥,出事了还怪我喽的味道)

    第三个注意点:目标空间必须可变

    例如下面这个代码,arr1指向"qwertyuiop"(这个字符串足够长吧),现在要求把arr2中的字符串拷贝到arr1中去,大家觉得结果会是什么?

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char* arr1 = "qwertyuiop";
    	char arr2[] = "abcedf";
    	strcpy(arr1, arr2);
     
    	printf("%s", arr1);
    	return 0;
    }

    看到这想必大家心理应该都有答案了,调试一下发现程序又崩了!这是为什么呢?

     就是因为arr1指向的是常量字符串,常量是不可修改的。如果非要写成代码去修改它,抱歉只能报错了。所以大家使用strcpy是目的地必须是可修改的。

    C语言的strcpy函数你了解吗

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!    

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。