strcmp
声明:int strcmp(const char *str1, const char *str2)
功能:C 库函数把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
参数:str1 – 要进行比较的第一个字符串。str2 – 要进行比较的第二个字符串。
返回值:该函数返回值如下
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
# include <stdio.h>
# include <stdlib.h>
# include <assert.h>
int mystrcmp(const char *str1, const char *str2)
{
int ret=0;
assert(*str1 && *str2);
while (!(ret=*str1-*str2)&& *str2)
{
++str1;
++str2;
}
if (ret>0)
ret=1;
else if (ret<0)
ret=-1;
return ret;
}
int main ()
{
char str1[]="abuse";
char str2[]="students";
char str3[]="student";
char str4[]="student";
printf ("%d\n",mystrcmp(str1, str2));
printf ("%d\n",mystrcmp(str2, str3));
printf ("%d\n",mystrcmp(str3, str4));
system ("pause");
return 0;
}
运行结果:
memcpy
声明:void *memcpy(void *str1, const void *str2, size_t n)
头文件: C 标准库 - <string.h>
功能:C 库函数从存储区 str2 复制 n 个字符到存储区 str1。(以字节拷贝)
参数:
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
n – 要被复制的字节数。
返回值:该函数返回一个指向目标存储区 str1 的指针
# include <stdio.h>
# include <stdlib.h>
void *mymemcpy (void *dst, const void* src,size_t count)
{
void *ret=dst;
while (count--)
{
*(char*)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
return (char *)ret;
}
int main ()
{
char str1[]="abuse power";
char str2[]="i am a student";
printf ("%s\n",memcpy(str2,str1,4));
system ("pause");
return 0;
}
运行结果:
memmove
声明:void *memmove(void *str1, const void *str2, size_t n)
功能:C 库函数从 str2 复制 n 个字符到 str1,但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
参数:
str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
n – 要被复制的字节数。
返回值:该函数返回一个指向目标存储区 str1 的指针。
# include <stdio.h>
# include <stdlib.h>
void *mymemmove (void *dst, const void* src,size_t count)
{
void *ret=dst;
if (dst<=src||(char *)dst>=((char *)src+count))
{
while (count--)
{
*(char*)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else
{
dst=(char *)dst+count-1;
src=(char *)src+count-1;
while (count--)
{
*(char*)dst=*(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}
return (char *)ret;
}
int main ()
{
char str1[]="i am very happy";
printf ("%s\n",mymemmove(str1,str1+5,5));
system ("pause");
return 0;
}
运行结果: