• 第30课


    第30课 - C语言中的字符串

    1. 字符串的概念

    (1)字符串是有序字符的集合

    (2)字符串是程序中的基本元素之一

    (3)C语言中没有字符串的概念

    • C语言中通过特殊的字符数组模拟字符串
    • C语言中的字符串是以 '' 结尾的字符数组       // 回忆前面学过的转义符 ,'' 即八进制的0表示的字符,八进制的0在内存中就是0

    2. 字符数组与字符串

    (1)在C语言中,双引号引用的单个或多个字符是一种特殊的字面量

    • 存储于程序的全局只读存储区
    • 本质为字符数组,编译器自动在结尾加上 '' 字符

    【字符数组与字符串】

     1 #include <stdio.h>
     2 
     3 int main()
     4 {    
     5     char ca[] = {'H','e','l','l','o'};
     6     char sa[] = {'W','o','r','l','d',''};
     7     
     8     char ss[] = "Hello world!";  // 使用"Hello World!"这个字符数组去初始化ss数组,这种语法是允许的!!!
     9 
    10     char* str = "Hello World!";  // 全局只读存储区,str[0]='h'是非法的
    11 
    12     printf("%s
    ", ca);   // 打印Hello及其后面的内容,直到遇到 ''
    13     printf("%s
    ", sa);   // World
    14     printf("%s
    ", ss);   // Hello World!
    15     printf("%s
    ",str);   // Hello World!
    16 
    17     return 0;
    18 }

    3. 字符串字面量

    (1)字符串字面量的本质是一个字符数组

    (2)字符串字面量可以看作指针常量

    (3)字符串字面量存储在程序的全局只读存储区,不可对其中的字符进行修改

    (4)字符串字面量至少包含一个字符,即空字符串 "" 包含一个 ' '

    【字符串字面量的本质】

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     // 字符串字面量经过编译器编译,返回的是存储它的字符数组的地址,该字符数组村粗在程序的全局只读存储区
     6     char b = "abc"[0];
     7     char c = *("123" + 1);
     8     char t = *"";
     9 
    10     printf("%c
    ", b);  // a
    11     printf("%c
    ", c);  // 2
    12     printf("%d
    ", t);  // 0
    13 
    14     printf("%s
    ", "Hello");  // Hello
    15     printf("%p
    ", "World");  // 0x400692,存储该字符串字面量的字符数组的地址
    16     
    17     return 0;
    18 }

    4. 字符串的长度

    (1)字符串的长度指的就是第一个 '' 字符前出现的字符的个数

          

    (2)函数 strlen 用于返回字符串的长度

    【strlen的使用】 

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int main()
     5 {
     6     char s[] = "HelloWorld";  // 以第一个出现的''作为字符串的结束符
     7 
     8     int i = 0;
     9     for (i=0; i<sizeof(s)/sizeof(s[0]); i++) {
    10         printf("%c
    ", s[i]);
    11     }
    12 
    13     printf("%zu
    ", strlen(s));   // 5
    14     printf("%zu
    ", strlen("123"));   // 3
    15 
    16     return 0;
    17 }
    18 
    19 /*
    20     H
    21     e
    22     l
    23     l
    24     o
    25 
    26     W
    27     o
    28     r
    29     l
    30     d
    31 
    32     5
    33     3
    34 */
  • 相关阅读:
    为什么要用do-while(0)?
    网络字节序&大小端存储
    sql语句w3school教程
    C++编码规范
    std::deque双端队列介绍
    gdb基本操作
    gdb调试多线程
    数据库基础
    删除vector所有元素
    stl迭代器失效
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/11853975.html
Copyright © 2020-2023  润新知