视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
strcpy函数和strncpy函数的区别
2025-09-28 00:58:25 责编:小OO
文档
strcpy:字串复制

  strcpy:字串复制 

  原型:char *strcpy(char *dest, char *src); 

  功能:把src所指由'\\0'结束的字符串复制到dest所指的数组中。 

  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 

  返回指向dest的指针。 

  注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。 

  因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串。 

编辑本段strncpy:字串复制

  原型:char * strncpy(char *dest, char *src, size_t n); 

  功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。 

  说明: 

  如果n > dest串长度,dest栈空间溢出产生崩溃异常。 

  否则: 

  1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符) 

  如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。 

  如果n = src串长度,与strcpy一致。 

  如果n = dest串长度,[0,src串长度]处存放src字串,(src串长度, dest串长度]处存放NULL。 

  2)src串长度>dest串长度 

  如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。 

  综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证src串长度下载本文

显示全文
专题