extern unsigned int strlen(char *s)
计算字符串s的(unsigned int)长度,不包括(‘\0’)
int strlen(const char *str)
{
assert(str!=nullptr);
int len=0;
while((*str++) != '\0') len++;
return len;
}
void *memest(void *s, int ch, size_t count)
将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s .作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
void *memest(void *src, int ch, size_t count)
{
assert(str!=nullptr);
char *tmpsrc = (char*)src;
while(count--) *tmpsrc++ = (char)ch;
return src;
}
void *memcpy(void *dst, const void *src, size_t n)
从源src所指的内存地址其实位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
void *memcpy(void *dst, const void *src, size_t num)
{
assert((dst!=nullptr) && (scr!=nullptr));
assert(des >= scr+num || scr > dst+num);//内存重叠
byte *psrc = (byte*)src;//byte即为unsigned char类型
byte *pdst = (byte*)dst;
while(num-- > 0) *pdst++ = *psrc++;//先取值,再指向下一位
return dst;
}
void memmove(void dest, const void* src, size_t count)
memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同
void* memmove(void* dest, void* source, size_t count)
{
void* ret = dest;
if (dest <= source || dest >= (source + count))
{
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while (count --) *dest++ = *source++;
}
else
{
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--) *dest-- = *source--;
}
return ret;
}
char *strstr(char *str1, const char *str2)
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl; //34xyz
本文详细介绍了几个常用的字符串操作函数,包括计算字符串长度的strlen、内存填充函数memset、内存拷贝函数memcpy与memmove以及字符串查找函数strstr。这些函数在C/C++编程中极为常见,通过本文你可以了解到它们的具体实现原理及应用场景。
2372

被折叠的 条评论
为什么被折叠?



