strlen 字符串长度
void test_strlen() {
const char *str = "abcdef";
int length = strlen(str);
//输出length = 6
LOGD("length = %d", length);
}
strcpy 字符串拷贝
- strcpy
char dst[100] = "abcdef";
const char *src= "ghi\0jkl";
//将 参数2 拷贝到 参数1 中
//参数1为 目标字符串数组
//参数2为 源字符串
strcpy(dst, src);
//输出结果为:ghi,因为遇到 \0 就结束
LOGD("strcpy dst= %s", dst);
- strncpy
char dst[100] = "abcdef";
const char* src = "ghijkl";
//从 src 中拷贝 n 个字符到 dst 中
//参数1为 目标字符串数组
//参数2为 源字符串
//参数3为 需要拷贝的字符串个数
strncpy(dst, src, 3);
//输出结果为:ghidef
LOGD("strcpy dst = %s", dst);
memcpy 内存拷贝
- strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
- strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,如果空间不够,就会引起内存溢出。memcpy则是根据其第3个参数决定复制的长度。
char dst[100] = "abcdef";
const char* src = "ghijkl";
//从 src 中拷贝 n 个字符到 dst 中
//参数1为 目标地址
//参数2为 源地址
//参数3为 需要拷贝的字节个数
memcpy(dst, src, 3);
//输出结果为:ghidef
LOGD("strcpy dst = %s", dst);
strcmp 字符串比较
从两个字符串的第一个字符开始比较,如果这两个字符相等,那么这两个字符串都会进行下一对字符比较,直到两个字符不相等,然后进行比较大小。如果第一个字符小于第二个字符,就会返回一个小于 0 的整数,等于则返回 0 ,大于则返回一个大于 0 的整数。
- strcmp
const char *str1 = "abbbcd";
const char *str2 = "abbbdd";
int result = strcmp(str1, str2);
//输出0,表示 str1前三个字符 = str2前三个字符
LOGD("st1 cmp str2 = %d", result);
- strncmp
const char *str1 = "abbbcd";
const char *str2 = "abbbdd";
//参数3为比较多少个字符
int result = strcmp(str1, str2,3);
//输出-1,表示 str1 < str2
LOGD("st1 cmp str2 = %d", result);
memcmp 内存比较
- memcmp是比较内存区域buf1和buf2的前count个字节,该函数是按字节比较的。
- memcmp不会在
\0
处停下来,而 strcmp 会在\0
停止
const char *str1 = "abb\0bdd";
const char *str2 = "abb\0bcd";
//参数3为比较的字节数
int result = memcmp(str1, str2,8);
//返回值大于0,表示 str1 大于 str2
LOGD("str1 & str2 = %d", result);
strcat 字符串追加
- strcat
char dst[100] = "abcdef";
const char *src= "ghijkl";
strcat(dst, src);
//输出为:abcdefghijkl
LOGD("dst = %s", dst);
- strncat
char dst[100] = "abcdef";
const char *src= "ghijkl";
//参数3为拼接3个字符
strncat(dst, src, 3);
//str3 = abcdefghi
LOGD("dst = %s", dst);
字符/字符串查找
strcspn
搜寻的是字符,检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符
char *str1 = "abcdef";
char *str2 = "dc";
int result = strcspn(str1, str2);
//result = 2
LOGD("reslut = %d", result);
strspn
搜寻的是字符,检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标
char *str1 = "abcdef";
char *str2 = "dc";
int result = strspn(str1, str2);
//result = 0
LOGD("result = %d", result);
strpbrk
搜寻的是字符,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回剩余字符串
char *str1 = "abcdef";
char *str2 = "dc";
char *result = strpbrk(str1, str2);
//result = cdef
LOGD("strpbrk = %s", result);
strstr
搜寻的是字符串,在字符串 str1 中查找第一次出现字符串 str2(不包含空结束字符)的位置开始的字符串。
char *str1 = "abcdef";
char *str2 = "dc";
char *result1 = strstr(str1, str2);
//result = (null)
LOGD("result1 = %s", result1 );
char *str3 = "cd";
char *result2 = strstr(str1, str3);
//result2 = cdef
LOGD("result2 = %s", result2);
strtok 字符串分割
char str1[100] = "www.baidu.com";
const char str2[2] = ".";
//参数1:源字符串
//参数2:分割字符串
char *result = strtok(str1, str2);
LOGD("strtok result = %s", result);
while (result != NULL) {
result = strtok(NULL, str2);
LOGD("result = %s", result);
}
strerror 错误码解析
在 C 语言中,程序发生错误的时候,是有一个隐藏的全局变量 errno 的(该变量在errno.h
),这个变量是一个整数的,譬如 0 ,1,2,3,…等都代表不同的错误信息,而 strerror 的作用就是翻译这个错误码。
//Success
errno = 0;
char *error = strerror(errno);
LOGD("test_strerror = %s", error);
//Operation not permitted
errno = 1;
char *error1 = strerror(errno);
LOGD("test_strerror = %s", error1);
//No such file or directory
errno = 2;
char *error2 = strerror(errno);
LOGD("test_strerror = %s", error2);
//No such process
errno = 3;
char *error3 = strerror(errno);
LOGD("test_strerror = %s", error3);