• 模板:strncpy函数


    参考链接:http://baike.baidu.com/view/1207711.htm

    strncpy 是 C语言的函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *destin, char *source, int maxlen),把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。

    格式:

    1
    2
    3
    头文件:#include<string.h>
     
    char*strncpy(char*dest,char*src,size_tn);

    功能:

    (c/c++)复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_tn的值决定。如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+''。举例:
    #include<stdio.h>
    #include<string.h>
    int main()
    { char name[]={"Chinanet"},dest[20]={};
    strncpy(dest,name,9);
    printf("%s ",dest); }
    1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
    如果n>src由于长度达到src NULL,正常复制,特别注意,如果src中有NULL,strncpy复制到NULL即使没到n也提前停止。如果n = src串长度,与strcpy一致。注意n的选择当n > dest串长度,dest栈空间溢出产生崩溃异常。
    2)src串长度>dest串长度
    如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest 最后一字符置为NULL。
    综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证dest串容量(能容纳下src串)才是最重要的。

    strcpy和strncpy的区别

    strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出。strncpy要安全一些。
    strncpy能够选择一段字符输出,strcpy则不能例如:
    char name[]={"Chinanet"},dest[20]={};
    strncpy(dest,name,9);
    printf("%s ",dest);
    strncpy可实现strcpy的字符串复制:
    char name[]={"Chinanet"},dest[20]={};
    strncpy(dest,name,sizeof(name));
    printf("%s ",dest);
  • 相关阅读:
    走近Qt
    C: 数组形参
    C++: 单例模式和缺陷
    c++: 获取delete[]中的数组大小
    像素格式
    BMP图像格式
    Sublime Text 格式化JSON-pretty json
    Sublime Text3配置SublimeREPL快捷键的方法(Python)
    Sublime Text3安装SublimeREPL插件以及快捷键设置
    Sublime Text3 注册码激活码(持续更新中2018-11-20)
  • 原文地址:https://www.cnblogs.com/mobileliker/p/4095319.html
Copyright © 2020-2023  润新知