跳至主要內容

3.12 字符串的基本概念


字符串的基本概念

  • 字符串是位于双引号中的字符序列
  • 在内存中以“\0”结束,所占字节比实际多一个

字符串的初始化

  • 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
  • 当把一个字符串存入一个数组时,会把结束符‘\0’存入数组,并以此作为该字符串是否结束的标志。
  • 有了‘\0’标志后,就不必再用字符数组 的长度来判断字符串的长度了
  • 初始化
    char name[9] = "lnj"; //在内存中以“\0”结束, \0ASCII码值是0
    char name1[9] = {'l','n','j','\0'};
    char name2[9] = {'l','n','j',0};
    // 当数组元素个数大于存储字符内容时, 未被初始化的部分默认值是0, 所以下面也可以看做是一个字符串
    char name3[9] = {'l','n','j'};
  • 错误的初始化方式
    //省略元素个数时, 不能省略末尾的\n
    // 不正确地写法,结尾没有\0 ,只是普通的字符数组
    char name4[] = {'l','n','j'};

     //   "中间不能包含\0", 因为\0是字符串的结束标志
     //    \0的作用:字符串结束的标志
    char name[] = "c\0ool";
     printf("name = %s\n",name);
输出结果: c

字符串输出

  • 如果字符数组中存储的是一个字符串, 那么字符数组的输入输出将变得简单方便。
  • 不必使用循环语句逐个地输入输出每个字符
  • 可以使用printf函数和scanf函数一次性输出输入一个字符数组中的字符串
  • 使用的格式字符串为“%s”,表示输入、输出的是一个字符串 字符串的输出

  • 输出
  • %s的本质就是根据传入的name的地址逐个去取数组中的元素然后输出,直到遇到\0位置
char chs[] = "lnj";
printf("%s\n", chs);
  • 注意点:
  • \0引发的脏读问题
char name[] = {'c', 'o', 'o', 'l' , '\0'};
char name2[] = {'l', 'n', 'j'};
printf("name2 = %s\n", name2); // 输出结果: lnjcool

  • 输入
char ch[10];
scanf("%s",ch);
  • 注意点:
  • 对一个字符串数组, 如果不做初始化赋值, 必须指定数组长度
  • ch最多存放由9个字符构成的字符串,其中最后一个字符的位置要留给字符串的结尾标示‘\0’
  • 当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符
上次编辑于: