一.char *strcpy(char *dest, const char *src)

参数

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。

注意:

1.dest需要分配内存,比如用数组的形式 或者 指针进行new操作.

2.src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。比如dest = new char[strlen(src)+1].

举例:

char array[];
strcpy(array, “hello”);//正确,数组array定义后就被分配了内存。
char *p = malloc();  //正确,指针p指向了确定大小的内存。
strcpy(p, "hello"); char *p;         //错误,指针p没有初始化,无法对p进行复制操作。
strcpy(p, "hello");
char *p = NULL;     //错误,指针赋为NULL,表示不指向任何地方。(delete某个指针后,把它赋为0,表明它不再指向任何对象
strcpy(p, "hello");
char ch[6] = "hello";
char *p = ch;     //正确,指针p指向ch的首地址。
strcpy(p, "hello");

二. char *strncpy(char *dest, const char *src, size_t n)

把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

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串)才是最重要的。
 

Strcpy,strcpy使用注意的更多相关文章

  1. 转:strcat与strcpy与strcmp与strlen

    转自:http://blog.chinaunix.net/uid-24194439-id-90782.html strcat 原型:extern char *strcat(char *dest,cha ...

  2. 学习strcat与strcpy

    前几天刚有点认识了strlen和sizeof,今天又有点认识了strcpy和strcat. 在vc2010环境下 1 strcpy strcpy(p,q),p要么为数组,要么为空指针,要是为空指针操作 ...

  3. C/C++的mem函数和strcpy函数的区别和应用

    mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码. memcpy.memset和memset三个函数在使用过程中,均需包含以下头文件: //在 ...

  4. (C)strcpy ,strncpy与strlcpy

    1. 背景 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 2. strcpy strcpy 是依据 /0 作为 ...

  5. (C)strcpy ,strncpy和strlcpy的基本用法

    好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. strcpy strcpy 是依据 /0 作为结束判断的, ...

  6. 面试15--strcmp,strcpy,memmove实现

    一. strcmp strcmp是用于比较两个字符串的大小的.   int strcmp( const char *string1, const char *string2 ) char *strin ...

  7. C语言中函数strcpy ,strncpy ,strlcpy的用法

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  8. Linux C中strcpy , strncpy , strlcpy 的区别

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  9. strcpy函数在VS2015无法使用的问题

    一:原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy该怎么办 呢 ...

随机推荐

  1. java连接redis5.0单机版报连接超时错误

    使用java代码测试redis5.0单机版时,报redis连接超时异常,而linux上的redis能正常访问: redis.clients.jedis.exceptions.JedisConnecti ...

  2. MySQL5.7在Ubuntu上的安装、配置与使用

    前言 服务器上安装东西一直是很让我头疼的事情,缘由:Linux基础不好.. 安装MySQL踩了很多坑,绕了很多弯路,这次踩得是tar包安装的坑... 当然,与tar包无关... 环境: Ubuntu ...

  3. Bugku 杂项 签到题

    签到题 加微信公众号会发现

  4. php选择文件夹上传

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  5. 循序渐进实现仿QQ界面(三):界面调色与控件自绘

    本篇讲述如何进行界面调色.界面调色一般有两种方法,调色板和HSL色彩变换.调色板局限于256色,这里不采用,因此用HSL色彩变换实现.首先要了解一下什么是HSL色彩空间,完整且详尽的知识请到维基百科去 ...

  6. HelloServlet类继承HttpServlet利用HttpServletResponse对象

    HelloServlet类继承HttpServlet利用HttpServletResponse对象 HelloServlet类的doGet()方法先得到username请求参数,对其进行中文字符编码转 ...

  7. [CSP-S模拟测试]:走格子(模拟+BFS+Dijkstra)

    题目描述 $CYJ$想找到他的小伙伴$FPJ$,$CYJ$和$FPJ$现在位于一个房间里,这个房间的布置可以看成一个$N$行$M$列的矩阵,矩阵内的每一个元素会是下列情况中的一种:$1.$障碍区域—这 ...

  8. .Net服务组件(ServicedComponent)简介及其使用

    .NET Enterprise Services 为企业应用程序提供重要的基础结构.COM+ 为企业环境中部署的组件编程模型提供服务结构.System.EnterpriseServices命名空间向 ...

  9. LintCode之在O(1)时间复杂度删除链表

    题目描述: 分析:因为题目要求不能用循环,而且只给了要删除的节点,并没有给链表.所以我无法取得要删除节点的前一个节点,只能在待删除的节点以及下一个节点上做文章.我的思路是:将待删除的节点的下一个节点的 ...

  10. wangjunkai

    <!Doctype html><html lang="en"> <head> <meta http-equiv="Content ...