浅谈字符串处理函数(二)

上篇我们介绍了strcpy函数,但是strcpy函数是一个存在潜在危险性的函数。试想一下,如果我们事先给的目的字符串数组太小,而需要拷贝的源字符串长度大于目的字符串长度,此时这个函数会怎么办呢?所以,接下来我们介绍一个它的升级版strncpy函数。

strncpy 是 C语言的库函数之一,把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest。

strncpy的原型:

char*strncpy(char*dest,char*src,size_tn);

其功能是:

复制字符串src中的内容到字符串dest中,复制多少由size_tn的值决定。如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只是将sec的前n个字符复制到dest的前n个字符,不自动添加‘\0‘,也就是结果dest不包括‘\0‘,需要再手动添加一个‘\0‘。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

实现如下:

char *mystrncpy(char *dst,const char *src,size_t n)
{
	char *ret=dst;
	assert(dst);
	assert(src);
	while(n && (*dst++=*src++))
	{
		n--;
	}
	if(n)
	{
		while(--n)
		{
		   *dst++=‘\0‘;
		}
	}
	return ret;
}
时间: 2024-12-23 17:49:19

浅谈字符串处理函数(二)的相关文章

浅谈字符串处理函数(三)

前面我们谈到了strcpy和strncpy这两个函数.这两个函数都没有考虑到内存重叠,假如要考虑内存重叠,我们又该如何实现呢?所谓重叠,就是src未处理的部分已经被dst给覆盖了 memcpy的函数原型如下:void *memcpy(void *dest, const void *src, size_t n); memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 函数返回指向dest的指针. 函数实现如下: void *mymem

浅谈欧拉函数【复习】

浅谈欧拉函数[复习] 定义: φ(n)表示小于n的正整数中和n互质的个数; 性质: 1.积性函数:φ(n×m)=φ(n)×φ(m)(感性理解) 2.a^φ(n)^≡1(mod n),当且仅当gcd(a,n)==1(感性理解) 3.[1,n]中与n互质的数的和为n×φ(n)/2 4.Σφ(d)=n,其中(d|n)(感性理解) 5.φ(p^a^)=p^a^-p^a-1^,其中(p为素数,a为正整数) 证明: 这里插入个游戏: 问题:求正整数3^83^的最后两位数 回到正题 一:√n求单个数的欧拉函数

泛型编程与C++标准模板库 : 浅谈sort()排序函数

以前用sort排序的时候,只知道sort函数有如下两种重载方式. template< class RandomIt > void sort( RandomIt first, RandomIt last ); template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); 当时对这些参数也不是很懂,只知道一些简单的用法. 1).比如: 如下代码可以使

浅谈压缩感知(二十四):压缩感知重构算法之子空间追踪(SP)

主要内容: SP的算法流程 SP的MATLAB实现 一维信号的实验与结果 测量数M与重构成功概率关系的实验与结果 SP与CoSaMP的性能比较 一.SP的算法流程 压缩采样匹配追踪(CoSaMP)与子空间追踪(SP)几乎完全一样,因此算法流程也基本一致. SP与CoSaMP主要区别在于"Ineach iteration, in the SP algorithm, only K new candidates are added, while theCoSAMP algorithm adds 2K

浅谈栈帧(二)

接上一篇:浅谈栈帧(一) 上一篇我们简单说了一下关于堆栈与栈帧调用函数是如何调用的,堆栈中的数据是如何存储在内存中的,用了几个简单的实例去观察分析他. 这篇,我们从根本来思考一下堆栈这种东西: 其实在计算机的早期,电脑的内存是用是十分老实的,没错就是老实.他没有进行一些内存空间上的保护. 大家想想,在当内存空间不存在保护时,我们利用一个函数不断去改写计算机本身的内存,然后导致缓冲区溢出.这将使电脑崩溃,无法使用.因为内存不存在狡兔三窟,所以就老老实实的被病毒所平推了,就是是强拆,所以强拆是多么的

浅谈SEO-收录(二)

如何更好的让搜索引擎收录网站中的内容,想要被良好的收录,可以尝试一下几点: 一.机器可读 百度通过一个叫做Baiduspider的程序抓取互联网上的网页, 经过处理后建入索引中,目前只支持读文本,flash.图片等非文本内容暂时不能处理, 放置在flash. 图片中的文字, 百度无法识别. 建议: 1. 使用文字而不是flash. 图片. Javascript等来显示重要的内容或链接. 2. Ajax等搜索引擎不能识别的技术, 只用在需要用户交互的地方, 不把希望搜索引擎“ 看” 到的导航及正文

浅谈JavaScript eval() 函数

用js的人都应该知道eval()函数吧,虽然该函数用的极少,但它却功能强大,那么问题来了,为什么不常用呢?原因很简单,因为eval()函数是动态的执行其中的字符串,里面有可能是脚本,那么这样的话就有可能引发系统的安全问题,所以能不用就不用,但至少也要知道它的用法. eval()函数的作用简单来说就是用来把括号中的字符串当作代码来执行,举个简单的例子,eval("2+3") ,返回的就是5.需要注意的是该方法就受的只能是原始的字符串参数,如果不是的话它将什么都不会做原样返回,所以你给它传

浅谈javascript的函数节流

什么是函数节流? 介绍前,先说下背景.在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在一个正常的操作中,都有可能在一个短的时间内触发非常多次事件绑定程序.而大家知道,DOM操作时很消耗性能的,这个时候,如果你为这些事件绑定一些操作DOM节点的操作的话,那就会引发大量的计算,在用户看来,页面可能就一时间没有响应,这个页面一下子变卡了变慢了.甚至在IE下,如果你绑定的resize事件进行

浅谈JavaScript匿名函数与闭包

一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); }                        //语法错误,无法执行 1.简单的使用: var box =  function(){ return 'Lee'; } alert (box());        //需要调用box()方法. 2.通过自我执行来执行匿名函数 (function(){                /