日常使用我们都知道:利用字符数组或者指向字符的指针去存储字符串。这里把一些使用的注意事项罗列出来以便以后回顾
1、首先strlen函数返回的是一个size_t类型的值,是无符号数,所以如果比较大小
strlen(x)>=strlen(y)是可以的,但是strlen(x)-strlen(y)>=0,这基本上都是成立的,无符号数相减永远大于等于0。所以不能对strlen做这样的比较
比如strlen(x)>=10可以,strlen(x)-10>=0这非常没有意义 一样的道理。
2、strcpy函数
原型 char* strcpy(char* dst,char const* src);
如果参数dst与src重叠,结果是未定义的。如果dst长于src赋值完以后加上\0表示终止。如果小于,那么就会赋值到这个数组大小之外,占用后面的内存空间。所以要对目标数组的长度进行判断。
strcat也是一样,把字符串连接,加到dst后面,要求可以容纳所有字符串。
字符串比较strcmp(s1,s2)有返回值,如果s1<s2返回负数,相等返回0,大于返回正数。
strncpy,strcat,strncmp均是能限制长度的函数
原型:char* strncpy(char* dst,char const* src,size_t len);
第三个参数就表示长度,就是向dst写入len个字符,如果src长度小于len,赋值完以后,dst后面补\0到len长度,如果大于len,则赋值len个,结果不会以null结尾。
strncat是最多从src复制len个字符到目标数组后面,最后加一个null,不管空间够不够。
strncmp就是比较前len个字符。
3、字符串查找函数
char* strchr(char const* str,int ch);第一次出现ch的地方
strrchr,最后一次
strpbrk则是查找多个字符某一个第一次出现在str中的位置。
查找子串使用strstr.
4、查找标记
char* strtok(char* str,char const* sep);
在这个函数执行时会修改所处理的字符串,如果不能修改,拷贝一份然后把拷贝的传递给strtok
sep表示要查找的标记
使用如下:
#include <stdio.h>
#include <string.h>
void
print_tokens( char *line )
{
static char whitespace[] = " \t\f\r\v\n";
char *token;
for( token = strtok( line, whitespace );
token != NULL;
token = strtok( NULL, whitespace ) )
printf( "Next token is %s\n", token );
}
第一次调用时用字符串,之后用NULL一直取。
5、字符分类
字符分类时使用#include <ctype.h>库,可以保证可移植性。
6、内存操作
第三个参数均是要处理的字节数,和strn带头的不同,遇到NULL事不会停止的。
memmove和memcpy差不多,不过它的源和目标操作数可以重叠。