strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)
//GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); return r; } /* while((*d++=*s++)); 的解释:赋值表达式返回左操作数,所以在复制NULL后,循环停止 */
char * strncpy( char *dest, char *src, size_t num );
1
2
3
|
char des[] = "Hello,i am!" ; char source[] = "abc\0def" ; strncpy (des,source,5); |
实现
char *strncpy(char *dest, const char *src, int n) { char c; char *s = dest; ) { size_t n4 = n >> ; for (;;) { c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; c = *src++; *dest++ = c; if (c == '\0') break; ) goto last_chars; } n -= dest - s; goto zero_fill; } last_chars: n &= ; ) return s; for (;;) { c = *src++; --n; *dest++ = c; if (c == '\0') break; ) return s; } zero_fill: ) dest[n] = '\0'; return s; }
与strcpy的区别
Strcpy和Strncpy的区别- - 第一种情况: char* p="how are you ?"; ]="ABCDEFGHIJKLMNOPQRS"; strcpy(name,p); //name改变为"how are you ? "====>正确! strncpy(name,p, sizeof(name));//name改变为"how are you ?" =====>正确!后续的字符将置为NULL 第二种情况: char* p="how are you ?"; ]; strcpy(name,p); //目标串长度小于源串,错误! name[]='\0'; //和上一步组合,弥补结果,但是这种做法并不可取,因为上一步出错处理方式并不确定 strncpy(name,p,sizeof(name)); //源串长度大于指定拷贝的长度sizeof(name),注意在这种情况下不会自动在目标串后面加'\0' name[]='\0'; //和上一步组合,弥补结果
strncpy 和 strcpy的区别 (要抽时间重点看,未完待续)的更多相关文章
- day9集合以及这段时间的总结 未完待续
随笔: # 可变类型:# 列表(可以存放多个值,可以按索引取值,是有序的),# 字典(字典里面是KEY:VALUE类型,key必须是不可变类型,不能按索引取值 因为它们是无序的,按KEY取值),# 集 ...
- Java抽象类和接口的区别(好长时间没看这种文章了)
Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...
- Actioncontext跟ServletActionContext的区别---未完待续
//public class BaseAction extends ActionSupport{ public static HttpServletRequest getRequest(){ retu ...
- Java枚举类型getClass和getDeclaringClass区别(未完待续)
Java中的枚举类型有getClass()和getDeclaringClass()两个方法,在通常情况下这两个方法返回的类型一样,在某些场景下会有不同的表现 参照 http://stackoverfl ...
- Day 4 测试(QwQ 表示没考好 未完待续。。。 可能要过一段时间才会更
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...
- Avro和Thrift区别(未完待续)
两者都是优秀的序列化框架: Avro创造之初是Hadoop之父Doug为了创造一种更加快捷的序列化方案(此时已经有了thrift),用于Hadoop的HDFS的文件序列化问题. Thrift一个成熟的 ...
- Linux C中strcpy , strncpy , strlcpy 的区别
strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...
- java构造代码块,构造函数和普通函数的区别和调用时间
在这里我们谈论一下构造代码块,构造函数和普通函数的区别和调用时间.构造代码块:最早运行,比构造函数运行的时间好要提前,和构造函数一样,只在对象初始化的时候运行.构造函数:运行时间比构造代码块时间晚,也 ...
- win10怎么查看激活到期时间如何看是否永久激活
win10怎么查看激活到期时间如何看是否永久激活 我们知道Windows系统需要激活后才可以使用全部功能,那么你的Windows10激活了吗?如何查看激活时间呢?是不是永久激活的?带着这些问题 ...
随机推荐
- Erlang generic standard behaviours -- gen_server module
在分析完gen module (http://www.cnblogs.com/--00/p/4271386.html)之后,就可以开始进入gen_server 的主体module 了.gen_serv ...
- Java动态替换InetAddress中DNS的做法简单分析1
在java.net包描述中, 简要说明了一些关键的接口. 其中负责networking identifiers的是Addresses. 这个类的具体实现类是InetAddress, 底层封装了Inet ...
- Object-c 语法 - 头文件引用(@class/#import/#include)
一. Objective-C 中 #import 和 #include 的区别 预编译指令 Objective-C:#import:由gcc编译器支持 C,C++:#include 在 Objecti ...
- mysql数据库编码设置成utf-8,避免出现乱码
设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 C ...
- Python 抓取网页乱码问题 以及EXCEL乱码
import codecs f1=codecs.open('items.json', 'r', encoding='utf-8').read().decode("unicode_escape ...
- 65.OV7725图像倒置180度
采集的图像倒置180度,这跟寄存器的设置有关.寄存器0X32的bit[7]可以变换倒置方向.
- homework-02 二维的,好喝的(二维数组的各种子数组)
1)输入部分 对于输入部分,我定义的输入格式是这样的 前两行为列数和行数 如果文件无法打开,或者输入文件格式不对,均会提示出错并退出 2)二维数组的最大矩形子数组 首先,我使用最最简单的暴力算法,直接 ...
- [磁盘管理与分区]——关于分区、磁盘分区表、MBR
磁盘连接与设备文件名的关系 1. 如下图所示:
- ED/EP简介
ED:electronic Deposit,电子存折 EP:electronic Purse,电子钱包 PIN:personal identification number,个人识别码 MAC:Mes ...
- 通过HTML5获取当前位置
// 当前位置 function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPositi ...