C 标准库 函数 源代码的实现 和 分析
//库函数实现
char *strcat (char *dst, const char *src)
{
char *p = dst;
while (*p)
p++;
while ((*p++ = *src++))
;
return dst;
}
char *strncat (char *s1, const char *s2, long unsigned int n)
{
char *dest = s1;
char c;
while (*s1) s1++;
c = '\0';
while (n > 0)
{
c = *s2++;
*s1++ = c;
if (c == '\0')
return dest;
n--;
}
if (c != '\0')
*s1 = '\0';
return dest;
}
char * strcpy (char *d, const char *s)//
{
char *r = d;
while ((*d++ = *s++));
return r;
}
char *strncpy (char *s1, const char *s2, long unsigned int n)
{
char *dest = s1;
for (; *s2 && n; n--) //n 如果大于s2的长度,则设置0
*s1++ = *s2++;
while (n--)
*s1++ = 0;
return dest;
}
void * memcpy (void *dst, const void *src, long unsigned int n)
{
const char *srcp;
char *dstp;
srcp = src;
dstp = dst;
while (n-- != 0)
*dstp++ = *srcp++;
return dst;
}
void *memmove (void *dst, const void *src, long unsigned int n)
{
const char *srcp;
char *dstp;
srcp = src;
dstp = dst;
if (srcp < dstp)
while (n-- != 0)
dstp[n] = srcp[n];
else
while (n-- != 0)
*dstp++ = *srcp++;
return dst;
}
void *memset (void *dst, int c, long unsigned int n)
{
while (n-- != 0)
n[(char *) dst] = c; // 即 (char*)dst[n] = c;
return dst;
}
库函数力求简洁,因此存在一定的安全的问题,这是在使用过程中特别注意的地方。也因此VC2005才推出_s的所谓的安全函数。也就是多加了判断位。
相关文档:
转自:http://commandos.blog.51cto.com/154976/130652
一、 环境准备
在本文中,所有程序均在Linux下开发完成,经测试能够正常运行。
在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:[url]http://www.cs.fsu.edu/~engelen/soap.html[/url]
我下载的是gsoap_2.7.12.tar.gz
下载下来解压缩,按正常安装过 ......
1.1 变量作用域
1.1.1 几种常见类型变量的作用域
作用域(scope)或者可见性是指变量在程序内的可见和可引用的范围。
比如:
1、 全局变量在所有的文件都可见,那他的作用域就是所有文件;
2、 static定义的全局变量,只在定义它的源文件中可见,那他的作用域就是其所在的源文件;
3、 函数内部的局部变量,只在其函数 ......
C 语言的面向对象
如前所说,面向对象是一种软件设计的思想,是语言无关的。在本节中,我举一个链表(list) 的例子来说明如何在 C 语言中的设计出有面向对象风格的代码。
定义接口
接口是面向对象语言中的一个比较重要的概念,接口只对外部承诺实现该接口的实体可以完成什么样的功能,但是不暴露实现的方式。这样的好处是 ......