• Strcpy,strcpy使用注意


    一.char *strcpy(char *dest, const char *src)

    参数

    • dest -- 指向用于存储复制内容的目标数组
    • src -- 要复制的字符串。

    注意:

    1.dest需要分配内存,比如用数组的形式 或者 指针进行new操作.

    2.src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。比如dest = new char[strlen(src)+1].

     举例:

    char array[6];
    strcpy(array, “hello”);//正确,数组array定义后就被分配了内存。
    char *p = malloc(6);  //正确,指针p指向了确定大小的内存。 strcpy(p, "hello");

    char *p;         //错误,指针p没有初始化,无法对p进行复制操作。
    strcpy(p, "hello");
    char *p = NULL;     //错误,指针赋为NULL,表示不指向任何地方。(delete某个指针后,把它赋为0,表明它不再指向任何对象
    strcpy(p, "hello");
    char ch[6] = "hello";
    char *p = ch;     //正确,指针p指向ch的首地址。
    strcpy(p, "hello");

    二. char *strncpy(char *dest, const char *src, size_t n)

     

     把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

    1)source串长度<=destin串长度,(这里的串长度包含串尾NULL字符)
    如果n>source由于长度达到source NULL,正常复制,特别注意,如果source中有NULL,strncpy复制到NULL即使没到n也提前停止。如果n = source串长度,与strcpy一致。注意n的选择当n > destin串长度,destin栈空间溢出产生崩溃异常。
    2)source串长度>destin串长度
    如果n =destin串长度,则destin串没有NULL字符,会导致输出会有乱码。如果不考虑source串复制完整性,可以将destin 最后一字符置为''。
    综上,一般情况下,使用strncpy时,建议将n置为destin串长度(除非你将多个source串都复制到destin数组,并且从destin尾部反向操作),复制完毕后,为保险起见,将destin串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证destin串容量(能容纳下source串)才是最重要的。
     
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    2019-8-31-dotnet-方法名-To-和-As-有什么不同
    2019-8-31-dotnet-方法名-To-和-As-有什么不同
    2018-11-30-WPF-解决-ListView-的滚动条不显示
    2018-11-30-WPF-解决-ListView-的滚动条不显示
    2019-4-29-dotnet-core-通过-frp-发布自己的网站
    2019-4-29-dotnet-core-通过-frp-发布自己的网站
    2019-1-29-jekyll-如何加密博客-防止抓取
    2019-1-29-jekyll-如何加密博客-防止抓取
    2019-8-31-msbuild-项目文件常用判断条件
    XenServer Tools安装
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/11864457.html
Copyright © 2020-2023  润新知