zoukankan      html  css  js  c++  java
  • 模板: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);
  • 相关阅读:
    I NEED A OFFER!
    水题 Codeforces Round #303 (Div. 2) A. Toy Cars
    模拟 HDOJ 5099 Comparison of Android versions
    模拟 HDOJ 5095 Linearization of the kernel functions in SVM
    贪心 HDOJ 5090 Game with Pearls
    Kruskal HDOJ 1863 畅通工程
    Kruskal HDOJ 1233 还是畅通工程
    并查集 HDOJ 1232 畅通工程
    DFS/并查集 Codeforces Round #286 (Div. 2) B
    水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta's Gift
  • 原文地址:https://www.cnblogs.com/mobileliker/p/4095319.html
Copyright © 2011-2022 走看看