This page looks best with JavaScript enabled

C 语言学习笔记 - 字符串

 ·  ☕ 3 min read  ·  ✍️ 鱼子盖饭 · 👀... views
  1. "a" 是字符串常量,'a' 是字符常量;

  2. 字符串实际就是由若干有效字符构成且以 '\0' 作为结束的一个字符序列;

  3. 一个字符型数组中存储并非一定是一个字符串,这要看它的最后一个元素是否为 '\0'。字符串结束标志 '\0' 也占一个字节的内存,但它不计入字符串的实际长度,只计入数组长度

  4. 省略对数组长度的声明时,必须人为地在数组的初始化列表中添加 '\0',才能将其作为字符串来使用;

  5. 通常,将一个字符串存放在一维字符数组中,将多个字符串存放在二维字符数组中。第一位的长度代表要存储的字符串的个数,可以省略,但第二维的长度不能省略,应按最长的字符串长度设定数组第二维的长度:

    1
    
    char weekday[][10] = {"Sunday", "Monday"};
    
  6. 当初始化列表中提供的字符串长度小于 10 时,系统将其后剩余的单元自动初始化为 '\0'

  7. 对于字符串常量而言,字符串常量本身代表的就是存放它的常量存储区的首地址,是一个地址常量:

    1
    
    char *ptr = "Hello";
    
  8. 如果字符串 "Hello" 保存在一个数组 str 中,然后再用一个字符指针指向它,则 str 的值是不可以修改的,但 ptr 的值(即 ptr 的指向)可以被修改,ptr 所指向的字符串也可以被修改:

    1
    2
    
    char str[10] = "Hello";
    char *ptr = str;
    
  9. 通过字符指针间接访问存放于数组中的字符串,既可以通过 *(ptr+i) (相当于 *(str+i),即 str[i]),也可以通过 ptr++,来访问。但对于数组名 str,不能用 str++ 操作使其指向字符串中的某个字符,因为数组名是一个地址常量

  10. s 格式符,将字符串作为一个整体输入/输出:

    1
    2
    
    scanf("%s", str);
    printf("%s", str);
    

    由于字符数组名 str 本身代表该数组中存放的字符串的首地址,所以数组名 str 的前面不能再加取地址运算符;

  11. 用函数 scanf()s 格式符不能输入带空格的字符串,字符串处理函数 gets() 则可以。gets(),以回车符作为字符串的终止符,同时将回车符从缓冲区读走,但不作为字符串的一部分;而 scanf() 不独奏回车符,回车符仍留在舒服缓冲区中;

  12. 函数 puts() 用于从括号内的参数给出的地址开始,依次输出存储单元中的字符,当遇到第一个 '\0' 时输出结束,并且自动输出一个换行符;

  13. gets() 不能限制输入字符串的长度,很容易引起缓冲区溢出,要保证输入字符串的长度不超过数组的大小,用:

    1
    
    fgets(str, sizeof(str), stdin);
    
  14. 字符串比较大小时,实际上是根据两字符对比时出现的第一对不相等的字符的大小来决定它们所在字符串的大小的;

  15. dstStr 的末尾添加 '\0' 标志 dstStr 中字符串的结束。如果将该行注释掉,则在输出复制后的字符串时,将会在实际复制的字符后面显示出一些乱码;

    1
    
    dstStr[i] = '\0';
    
  16. 数组都是以传地址调用的形式传递给被调函数的,为防止实参在被调函数中被意外修改,可以在相应的形参面前加上类型限定符 const

  17. 声明一个返回指针值的函数:

    1
    
    char *MyStrcat(char *dstStr, const char *srcStr);
    
  18. const 放在类型关键字的前面,表明 *p 是一个常量,而 p 不是。虽然 *p 的值是不可修改的,但 p 指向的变量 a 的值仍然是可以修改的,即对 a 执行赋值操作是合法的:

    1
    2
    3
    4
    5
    
    int a, b;
    const int *p = &a;
    
    /* 该语句与上面等价 */
    int const *p = &a;
    
  19. const 放在类型关键字 * 的后面,变量名的前面,表明 p 是一个常量,而 *p 不是。在程序中不能修改指针 p,让它指向其它变量,但是它所指向的变量的值是可以修改的;

    1
    
    int* const p = &a;
    
  20. 一个 const 放在类型关键字之前,另一个 const 放在类型关键字 * 之后和变量名之前,表明 p*p 都是一个常量,都是只读的:

    1
    
    const int* const p = &a;
    

鱼子盖饭
WRITTEN BY
鱼子盖饭
Get into trouble, make mistakes.


What's on this Page