新闻资讯
看你所看,想你所想

strncpy

strncpy

strncpy

strncpy函式用于将指定长度的字元串複製到字元数组中,是 C语言的库函式之一,来自 C语言标準库,定义于 string.h。语法形式为:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字元串中以src地址开始的前n个位元组複製到dest所指的数组中,并返回被複製后的dest。

基本介绍

  • 中文名:strncpy
  • 外文名:strncpy
  • 属于:库函式
  • 来自:C语言标準库
  • 适用:电脑编程
  • 头档案:string.h
  • 功能:串拷贝

strncpy基本格式

语法

char *strncpy(char *destinin, char *source, int maxlen);

参数

destinin:表示複製的目标字元数组;
source:表示複製的源字元数组;
maxlen:表示複製的字元串长度。

功能

功能讲解

(c/c++)複製字元串source中的内容(字元,数字、汉字....)到字元串destinin中,複製多少由maxlen的值决定。如果source的前n个字元不含NULL字元,则结果不会以NULL字元结束。如果n<source的长度,只是将source的前n个字元複製到destinin的前n个字元,不自动添加'\0',也就是结果destinin不包括'\0',需要再手动添加一个'\0'。如果source的长度小于n个位元组,则以NULL填充destinin直到複製完n个位元组。source和destinin所指记忆体区域不可以重叠且destinin必须有足够的空间来容纳source的字元长度+'\0'。举例:
#include<stdio.h>#include<string.h>int main(){char name[]={"Chinanet"},destin[20]={};strncpy(destin,name,3);printf("%s\n",destin);}
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 最后一字元置为'\0'。
综上,一般情况下,使用strncpy时,建议将n置为destin串长度(除非你将多个source串都複製到destin数组,并且从destin尾部反向操作),複製完毕后,为保险起见,将destin串最后一字元置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证destin串容量(能容纳下source串)才是最重要的。

功能概括

简而言之,就是把source指向的字元串的前size_t n个字元(不包括\0,\0得自己手动加在*destin被複製之后)複製到destin指向的字元串中。如果要複製的*source的部分有\0,就把\0複製进去,之后就提前结束,即使没複製到第size_t n个字元也是。返回指向*destin的指针。

区别

strcpy只是複製字元串,但不限制複製的数量,很容易造成缓冲溢出。strncpy要安全一些。
strncpy能够选择一段字元输出,strcpy则不能。例如:
char name[]="Chinanet",destin[20]={0};
strncpy(destin,name,9);
printf("%s\n",destin);
strncpy可实现strcpy的字元串複製:
char name[]="Chinanet",destin[20]={0};
strncpy(destin,name,sizeof(name));
printf("%s\n",destin);

转载请注明出处海之美文 » strncpy

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com