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的所谓的安全函数。也就是多加了判断位。
相关文档:
#include "windows.h"
void main()
{
MessageBox(NULL, "你好啊!", "提示", MB_OK);
return 0;
}
通过windows.h文件调用windows自带的api函数MessageBox,来完成提示框,效果棒
null表示附属的窗体为空
MB_OK表示对话框的类型 ......
表达式的副作用
运算符的优先级与结合性规定了表达式中相邻两个运算符的运算次序,但对于双目
运算的操作数,C++没有规定他们的计算次序。例如,对于表达式:
exp1 + exp2;
先计算 exp1 还是 exp2?不同的编译器有不同的做法。
在数学上,对于双目运算符,不论先计算哪一个操作数,要求最终计算结果一样。
在 C++ ......
GCC安装成功,所需文件有:
libf2c-3.3.2-1.i386.rpm
libstdc++-devel-3.3.2-1.i386.rpm
glibc-kernheaders-2.4-8.36.i386.rpm
glibc-headers-2.3.2-101.i386.rpm
glibc-devel-2.3.2-101.i386.rpm
gcc-objc-3.3.2-1.i386.rpm
binutils-2.14.90.0.6-3.i386.rpm
gcc-3.3.2-1.i386.rpm
gcc-c++-3.3.2-1.i386.rpm
autom ......
本文关键词: c++ 含义
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量 ......