memset
将已开辟内存空间 s 的首 n 个字节的值设为值 c(给空间初始化)。这个函数通常为新申请的内存做初始化工作。
用法:
void *memset(void *s, int c, size_t size);
memcpy
拷贝内存上的每个字节的内容到目标内存
用法:
void *memcpy(void *dest, const void *src, size_t n);
strcpy
strcpy是长度不受限制的字符串函数。意思是把src里面得内容拷贝到dest里面
char *strcpy(char *dest, char *src);
返回值:返回参数dest的字符串起始地址.
说明:
- 如果dest所指能存不大,可能会导致内存溢出的情况。
- 该函数的参数是字符指针,但是可以是字符串变量和字符数组。
- 字符串默认结束有一个null结束符,而字符数组没有。所以应该注意src要求有null结束符,所以字符数组的长度必须大于等于字符串长度加null结束符的总长度。
重写strcpy
#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *dest, const char *src){
assert(dest && src);
char *start = dest;
while(*desc++ = *src++){
;
}
return start;
}
strncpy
将字符串src中最多n个字符复制到字符数组dest中。
返回值:返回参数为dest字符串的起始地址。
char *strncpy(char *desc, char *src, size_t n);
说明:
- 如果n大于dest的长度,会导致dest栈内存溢出。
- 如果如果没有初始化dest,直接将n个字符复制到dest中,由于没有null结尾,直接访问dest会导致异常。所以使用dest之前最好用memset将dest用null填充。
- 如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。
strcat
把src所指字符串添加到dest结尾处。
char *strcat(char *dest, char *src);
返回值:返回参数为dest字符串的起始地址。
注意:
- dest和src的内存空间不可以重叠,即strcat不能连接同一个字符串。
- dest有足够大的内存来容纳src字符串,否则会导致内存泄漏。
strncat
字符串src的开头拷贝n 个字符到dest字符串尾部。
char *strncpy(char *dest, char *src, size_t n);
strcmp
是比较函数,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
int strcmpy(const char *dest, const char *src);