欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > C语言从头学30——字符串

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

2024/10/24 15:23:02 来源:https://blog.csdn.net/m0_72128260/article/details/140234616  浏览:    关键词: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.说明:单独字符能不能修改的原因:为什么字符串声明为指针时不能单独字符修改,声明为数组时就可以修改?原因是声明为指针时,字符串是一个保存在内存“栈区”的常量,“栈区”的值由系统管理,一般都不允许修改;声明为数组时,字符串的副本会被拷贝到内存“堆区”,“堆区”的值由用户管理,是可以修改的。整个字符串能不能修改原因:以指针形式声明的字符串变量,因为其是变量故可以指向其它的字符串;而字符数组变量虽称作变量但不能指向另一个字符串,因为字符数组的数组名总是指向初始化时的地址,不能修改。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com