因为项目需要,接触到很多直接操纵char数组和const char* 的代码场景,经常是凶险万分。常见的字符串处理函数(strcpy, strcat, strcmp)已经既不安全 也无法满足需要。
这里介绍一堆高级的字符串函数及使用场景
判断字符串前几字个字符是否等于指定串: strncmp
char* str = "12345";
if ( 0 == strncmp(str, "123", 3) )
{
printf("相等");
}
不区分大小写 判断字符串前几字个字符是否等于指定串: strncasecmp
char* str = "ABCDE";
if ( 0 == strncasecmp(str, "aBC", 3) )
{
printf("相等");
}
判断字符串2是否是字符串1的字串: strstr
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char* str1 = "12345";
char* str2 = "23";
char* p = strstr(str1, str2);
if ( NULL != p )
{// 说明str2 是 str1的字串
printf("addr of str1: %d\n", str1);
printf("addr of p: %d\n", p);
}
执行结果 :
addr of str1: 4197096
addr of p: 4197097
判断字符串是否包含某个字符: strchr
若包含有 则返回字符第一次出现的地址
char* str1 = "12345";
char* p = strchr(str1, '3');
if ( NULL != p )
{// 说明str1包含有 '3'
printf("addr of str1: %d\n", str1);
printf("addr of p: %d\n", p);
}
执行结果:
addr of str1: 4197080
addr of p: 4197082
字符串拷貝 strdup
拷贝字符串的时候使用这个函数,为将'\0'一起拷贝了, 自己去malloc的话 往往忘记要len+1
const char* test = "test string";
char* p = strdup(test);
cout << p << endl;