C语言从头学30——字符串

1.基本概念
       C语言没有独立的字符串类型,字符串被当作字符数组处理。但在处理字符串时,在字符串最后一个字符后边会自动添加一个全是二进制 0 的字节,写作 "\0" 字符,表示字符串结束。所有字符串的最后一个字符,都是 "\0" 。这样不需知道字符串的长度,就可以读取内存里面的字符串,一旦读到字符 "\0" 则字符串结束。也由此,声明的字符串长度与实际能存放的字符串长度差一个,即 "\0" 。
       正因为字符串是字符数组,所以有关数组的操作对于字符串同样适用。
       字符串数组赋初值可以写成大括号内单引号引着的一个个字符。这样写是太麻烦,实际中的字符串赋初值是用一对双引号把连续字符引起来;它与字符数组等价,但形式简单。例如:
       char myStr[] = "Hello World!";  //强调:这种写法只能是在字符数组声明时赋初值
       上面声明的字符串,名:myStr 长度:13(包含空格、结尾"\0")。这个 "\0" 一定要牢记,比如:char a='1'; 与char a[] = "1";  这两者一个是双引号一个是单引号,区别就在 "\0"上,"1"不但有1还有 "\0",而'1'只有1。
       如果字符串中,本身就包含双引号怎么办呢?给双引号前边加上一个反斜杠(称为转义符)即\",就把双引号加到字符串中了。
       上面的举例如写成:myStr[]="Hello ""World";(即连续的几对双引号都赋给一个字符串)也是符合语法的,不会报错。
       在printf函数中输出字符串:常量直接输出,变量用%s占位符输出。
2.字符串变量的声明
      字符串变量可以按字符数组形式声明,也可以用指向字符数组的指针形式进行声明。
      char myStr[1024] = "C语言从头学"; //声明长度1024字节实际使用不了会初始化成 "\0"
                                                              //如果不写具体长度只写空的[ ],计算机会自己计算所需要的长度
      char* myStr = "C语言从头学";
      上面的声明形式上差不多,但还是有差异,表现在:
       a.字符数组声明的字符串变量可以一个一个字符进行修改,但不能重新赋值;
              char a[]="1134"; a[0]='0'; a[1]='2'; //合乎语法
             但如果:a[]="4311"; //会报错
       b.指针方式声明的字符串变量可以重新赋值,但不能单个字符进行修改;
              char* b="1111"; b="2222"; //合乎语法
              但如果:b[0]='2'; //可能报错或出现错误运算结果
3.说明:单独字符能不能修改的原因:为什么字符串声明为指针时不能单独字符修改,声明为数组时就可以修改?原因是声明为指针时,字符串是一个保存在内存“栈区”的常量,“栈区”的值由系统管理,一般都不允许修改;声明为数组时,字符串的副本会被拷贝到内存“堆区”,“堆区”的值由用户管理,是可以修改的。整个字符串能不能修改原因:以指针形式声明的字符串变量,因为其是变量故可以指向其它的字符串;而字符数组变量虽称作变量但不能指向另一个字符串,因为字符数组的数组名总是指向初始化时的地址,不能修改。

相关推荐

  1. C语言从头30——字符串

    2024-07-12 07:02:05       19 阅读
  2. C语言从头32——字符串数组

    2024-07-12 07:02:05       27 阅读
  3. C语言从头35——struct结构

    2024-07-12 07:02:05       21 阅读
  4. C语言从头31——与字符串变量相关的几个函数

    2024-07-12 07:02:05       24 阅读
  5. C语言从头33——内存管理(一)

    2024-07-12 07:02:05       23 阅读
  6. C语言从头01——入门程序

    2024-07-12 07:02:05       29 阅读
  7. C语言从头17——sizeof 运算符

    2024-07-12 07:02:05       27 阅读
  8. C语言从头20——指针

    2024-07-12 07:02:05       34 阅读
  9. C语言从头21——函数

    2024-07-12 07:02:05       31 阅读
  10. C语言从头02——基本语法概念

    2024-07-12 07:02:05       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 07:02:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 07:02:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 07:02:05       58 阅读
  4. Python语言-面向对象

    2024-07-12 07:02:05       69 阅读

热门阅读

  1. Git使用简介及相关命令

    2024-07-12 07:02:05       26 阅读
  2. 基于深度学习的视频内容分析

    2024-07-12 07:02:05       27 阅读
  3. 阿里生态体系

    2024-07-12 07:02:05       27 阅读
  4. 物联网时代的等保测评:保障万物互联的安全

    2024-07-12 07:02:05       28 阅读
  5. Oracle数据库模式对象

    2024-07-12 07:02:05       24 阅读
  6. 气浮沉淀污水处理设备广泛应用

    2024-07-12 07:02:05       21 阅读
  7. copy 和 mutableCopy 有点乱

    2024-07-12 07:02:05       28 阅读
  8. Go 1.19 工具链升级:go命令与工具改进详解

    2024-07-12 07:02:05       31 阅读
  9. 暗黑魅力:Xcode全面拥抱应用暗黑模式开发指南

    2024-07-12 07:02:05       27 阅读