第9章:字符串、字符和字节

9.1 字符串基础

  c语言中并没有给出显示的字符串数据类型,字符串通常以字符数组的形式出现。字符串会以'\0'的NUL字节结尾,但是字符串的长度计算不会把NUL算进去。

  头文件string.h包含了使用字符串函数所需的原型和声明,包含这个头文件可以更好地为我们的程序执行错误检查。

9.2 字符串长度

  库函数中的strlen原型如下

size_t
strlen(char const *string){
    int length;
    for(length = 0 ; *string++ != '\0' ;){
        length++;
    }
    return length;
}

size_t被定义在stddef.h中,他是一个无符号整数。在表达式中运用无符号整数会导致意想不到的错误,如下所示

第9章:字符串、字符和字节第二个值永远为真 , 因为无符号整数大于等于0;

 

 第9章:字符串、字符和字节

 

 9.3 不受限制的字符串函数

  像上面的strlen库函数只是通过寻找字符串参数结尾的NUL来判断它的长度,我们必须确保字符串不会溢出内存。

9.3.1 复制字符串

  用于复制字符串的库函数是char *strcpy(char *dst , char const *src) . 

这个函数把src字符串复制到dst中,因此dst必须是一个字符数组或者是一个指向动态分配内存的数组的指针,不能使用字符串常量。

复制字符串之后,dst字符数组初始值被覆盖丢失。

并且我们在复制字符串的时候,必须保证dst字符数组长度大于等于src;

9.3.2 连接字符串

  用于连接字符串的库函数是char *strcat(char *dst , char const *src);

9.3.3 函数的返回值

  strcpy和strcat都返回它们第一个参数的一份拷贝,也就是一个指向目标字符数组的指针。

9.3.4 字符串比较

  库函数int strcmp(char const *s1 , char const *s2) 用于比较两个字符串,如果第一个字符串小于第二个字符串返回一个负值。

9.4 长度受限的字符串函数

  第9章:字符串、字符和字节

 

 像第一个函数strncpy唯一的不同就是多了一个参数len , 他将会复制len个src的字符到dst中。如果len大于strlen(src) 那么就会用NUL填充到len ,如果 小于 , 那么只会复制 len 个 字符到dst中,注意最后不会加NUL。

但是strncat总会在dst最后加一个NUL

9.5 字符串查找基础

9.5.1 查找一个字符

  在一个字符串中查找一个特定字符最容易的方法是用strchr 和 strrchr;

char *strchr(char const *str , int ch)
char *strrchr(char const *str , int ch) 

这两个函数的返回值都是一个指向找到位置的指针。区别在于第一个函数返回找到的第一个位置的指针,第二个函数返回找到最后一个位置的指针

9.5.2 查找任何几个字符

  strpbrk(string pointer break)用于查找任何一组字符第一次在字符串中出现的位置。

char *strpbrk(char const *str , char const *group)

下面是一个应用的实例

char *group = "abc"
char string[20] = "Hello there , honey.";
char *ans = strpbrk(string, "group");

 

上一篇:opencv——几何变换原理与实现


下一篇:Python opencv(五) 模糊操作