字符串长度
库函数strlen
的原型如下:
size_t strlen(char const* string);
其中size_t
类型为unsinged long
。
所以下述比较可能带来潜在的错误:
if (strlen(str1) - strlen(str2) >= 0)
>=
左边操作数的计算结果为无符号类型,实际上也会将右边操作数0解释为无符号类型,有符号类型和无符号类型做相同运算时会将数值类型提升为无符号。
正确的写法:
if (strlen(str1) >= strlen(str2))
该函数的实现也比较简单。
不受限制的字符串函数
最常用的字符串函数都是不受限制的,就是说它们只是通过寻找字符串参数结尾的NULL字节来判断长度,程序员必须保证结果字符串不会溢出这块内存。
复制字符串
库函数strcpy
原型如下:
char* strcpy(char* dst, char const* src);
返回指向dst
的字符指针,
使用时必须保证目标字符数组的空间足以容纳需要复制的字符串。
连接字符串
char* strcat(char* dest, char const* src);
字符串比较
int strcmp(char const* s1, char const* s2);
s1<s2
返回小于0的数,=
返回0,>
返回大于0的数。
长度受限的字符串函数
char* strncpy(char* dest, char const* src, size_t len);
char* strncat(char* dest, char const* src, size_t len);
char* strncmp(char const* s1, char const* s2, size_t len);
如果src
长度小于len
,用\0
填充,如果大于len
,之用len
个字符被复制。
字符操作
内存操作
void* memcpy(void* dest, void* src, size_t n);
void* memmove(void* dest, void* src, size_t n);
void* memcmp(void* dest, void* src, size_t n);
void* memchr(void const *src, int c, size_t n);
void* memset(void* src, int c, size_t n);