b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C语言strncpy()函数: 复制字符串的前n个字符

电脑杂谈  发布时间:2020-03-20 02:12:59  来源:网络整理

strncpy()_strncpy memcpy_strncpy函数

头文件: #include

strncpy()用于复制字符串的前n个字符. 它的原型是:

char * strncpy(char * dest,const char * src,size_t n);

[参数说明] dest是目标字符串指针,而src是源字符串指针.

strncpy memcpy_strncpy()_strncpy函数

strncpy()将字符串src的前n个字符复制到字符串dest.

与strcpy()不同,strncpy()不会将结束标记'\ 0'附加到dest上strncpy函数,这引起了许多不合理的问题,将在以下示例中进行解释.

注意: src和dest指向的存储区域不能重叠strncpy函数,dest必须有足够的空间来容纳n个字符.

[返回值]返回字符串dest.

strncpy()_strncpy memcpy_strncpy函数

[功能示例]复制4组字符串.

#include<stdio.h>
#include<string.h>
int main(void){
    char dest1[20];
    char src1[] = "abc";
    int n1 = 3;
    char dest2[20]="********************";
    char src2[] = "abcxyz";
    int n2 = strlen(src2)+1;
    char dest3[100] = "http://see.xidian.edu.cn/cpp/shell/";
    char src3[6] = "abcxyz";  // 没有'\0'
    int n3 = 20;
    char dest4[100] = "http://see.xidian.edu.cn/cpp/u/yuanma/";
    char sr[] = "abc\0defghigk";
    int n4 = strlen(src3);
    strncpy(dest1, src1, n1);  // n1小于strlen(str1)+1,不会追加'\0'
    strncpy(dest2, src2, n2);  // n2等于strlen(str2)+1,恰好可以把src2末尾的'\0'拷贝到dest2
    strncpy(dest3, src3, n3);  // n3大于strlen(str3)+1,循环拷贝str3
    strncpy(dest4, sr, n4);  // sr中间出现'\0'
    printf("dest1=%s\n", dest1);
    printf("dest2=%s, dest2[15]=%c\n", dest2, dest2[10]);
    printf("dest3=%s\n", dest3);
    printf("dest4=%s, dest4[6]=%d, dest4[20]=%d, dest4[90]=%d\n", dest4, dest4[6], dest4[20], dest4[90]);
    return 0;
}

VC6.0运行结果:

strncpy()_strncpy memcpy_strncpy函数

MinGW结果:

从以上结果中可以看出,strncpy()难以控制并且行为异常. 使用strncpy()的最安全方法是使n等于strlen(src)+1,也就是说,复制整个字符串并将'\ 0'附加到dest. 但这没什么不同. 如果必须实现复制字符串的前n个字节的功能,则可以在Linux下使用strlcpy(). strlcpy()不是标准函数. 在Windows下不可用. 您需要对其进行自定义. 请参考: 定制函数以实现strncpy()函数的功能并消除其缺陷.

NdkDemo代码已上传到Github

strncpy memcpy_strncpy函数_strncpy()

如果有任何不当支出,请留言以交流!

我的GitHub

我的CSDN

我的简书

发展笔记


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-145501-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...