1. strcat()函数
不调用C++/C 的字符串库函数,请编写函数 strcat
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
strcat()接受两个字符串参数。将第二个字符串的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串不改变。
2. memset()函数
void *memset(void *s, char ch, unsigned n)
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作
你刚分配的内存空间,或者是被你用过的内存空间里面的数据是不固定的
为了避免这些无用的数据给自己的程序带来影响,可以用memset把这些内存里面的数据置成某个数值
一般情况下是置0;
/* MEMSET.C: This program uses memset to
* set the first four bytes of buffer to "*".
*/
#include <memory.h>
#include <stdio.h>
void main( void )
{
char buffer[] = "This is a test of the memset function";
printf( "Before: %s/n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s/n", buffer );
}
输出:
Before: This is a test of the memset function
After: **** is a test of the memset function
3. strcpy()函数
1.strcpy的实现代码
char*strcpy(char*strDest, const char*strSrc)
{
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while ((*strDest++ = *strSrc++) !='/0' '')
continue;
return address;
}
2.memcpy的实现代码
void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言
byte *pbTo = (byte *) pvTo; // 防止改变pvTo 的地址
byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom 的地址
while(size -- > 0 )
*pbTo ++ = *pbFrom ++ ;
return pvTo;
}
strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出。
strncpy要安全一些。
memcpy也可以用来在内存中复制数据,由于字符串是以零结尾的,所以对于在数据中包含零的数据只能用memcpy。
性能上它们不一定有多大差别。