size_t和int
size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。
在32位架构中被普遍定义为:typedef unsigned int size_t;
而在64位架构中被定义为:typedef unsigned long size_t;
size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。
1.memset
头文件:
#include <string.h>
函数原型:
void *memset(void *a, int ch, size_t length);
函数说明:
将参数a所指的内存区域前length个字节以参数ch填入,然后返回指向a的指针。在编写程序的时候,若需要将某一数组作初始化,memset()会很方便。
实现代码:
void *memset(void *a, int ch, size_t length)
{
assert(a != NULL);
void *s = a;
while (length--)
{
*(char *)s = (char) ch;
s = (char *)s + 1;
}
return a;
}
应用:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char a[3]="my";
char b[8]="aaaaaaa";
memset(b,'c',3);
cout<<b<<endl;
return 0;
}
2.memcpy函数
头文件:
#include <string.h>
函数原型:
void *memcpy(void *dst, const void *src, size_t length);
函数说明:
从 src 所指的内存地址的起始位置开始,拷贝length个字节的数据到 dest 所指的内存地址的起始位置。你可以用这种方法复制任何类型的值(例如:int,double,结构或结构数组),如果src和dst以任何形式出现了重叠,它的结果将是未定义的。
实现代码:
void *memcpy(void *dst, const void *src, size_t length)
{
assert((dst != NULL) && (src != NULL));
char *tempSrc= (char *)src; //保存src首地址
char *tempDst = (char *)dst; //保存dst首地址
while(length-- > 0) //循环lengt