(C/C++)值得研究的一些函数
1. memcpy函数的实现
首先对这个函数做一些说明。
#include <string.h>
void *memcpy(void *to, const void *from, size_t count)
函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。
在C99中,to和from由restrict修饰。
先来看看微软的实现:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)
{
void * ret = dst;
#if defined (_M_IA64)
{
extern void RtlMoveMemory( void *, const void *, size_t count );
RtlMoveMemory( dst, src, count );
}
#else /* defined (_M_IA64) */
/*
* copy from lower addresses to higher addresses
*/
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
#endif /* defined (_M_IA64) */
return(ret);
}
再来看看coreutils中的实现:
void *
memcpy (void *destaddr, void const *srcaddr, size_t len)
{
char *dest = destaddr;
char const *src = srcaddr;
while (len-- > 0)
*dest++ = *src++;
return destaddr;
}
再来看Linux中实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
各种考虑的实现
void* memcpy( void* dest, const void* src, size_t count )
{
if (count<0)
{
printf("Invalid count number !.\n");
return (void*)0;
}
if(src==NULL||dest==NULL)
return (void*)0 ;
if ((unsigned int)dest==(unsigned int)src)
{
printf("The source is equal with the destanation!.\n");
return dest;
}
char* d = (char*)dest;
const char* s = (const char*)src;
while(count--)
*d++ = *s++;
return dest;
}
高质量C++/C编程指南里面的实现
void *memcpy(void *pvTo, const void *pvfrom, size_t size)
{
assert((pvTo != NULL) && (pvfrom != NULL)); // 使用断言
byte *pbTo = (byte *) pvTo; // 防止改变pvTo的
相关文档:
#include<stdio.h>
const int A=10;
void main()
{
int group[A];
for(int i=0;i<A;i++)
{
group[i]=i+1;
}
int k=A;
int m=0;
int n=2;
int c=0;
int x;
do
{
&nbs ......
真正发现人生需要知识的时候,我的青春已经浪费了一半。
于是鼓起勇气来到北大青鸟学习IT,鉴于多方考虑,还是选择了软件测试。
如今课业的一大半也已结束,从刚开始的一无所知,渐渐成长为一个菜鸟……
在课程的学习过程中,才渐渐发现自己对于这个行业的兴趣,尤其是软件开发这一块。
甚至对自己选择做测 ......
最近有个项目需要在UNIX下用C做,很久没用过C了,发现些问题容易搞错。
这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数。
realRead = fread(buf,item,count,fp) (每次读item大小的数据块,分count次 ......
用书上的代码拼凑的,还是很有成就感的哈
支持的运算符号有"+","-","*","/","(",")","#"。
支持20位以内无符号整数,当然可以很容易的改成有符号或者是实型数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OPSETSIZE 7
//函数结果状态代码
#define TRUE 1
#define FALSE 0 ......
原帖地址:http://blog.csdn.net/Zerosir/archive/2004/10/02/123663.aspx
为了使用C语言编程直接读取dbf文件,需要了解dbf文件的二进制文件格式,下面给出简要的说明。
表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节) ......