[精华帖子]C语言中的字符数组与字符串-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 期刊>>

期刊库

>>

[精华帖子]C语言中的字符数组与字符串

[精华帖子]C语言中的字符数组与字符串

发布:Nicolle | 分类:期刊库

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供 ...
坛友互助群


扫码加入各岗位、行业、专业交流群


  1. 1、字符数组的定义与初始化
  2. 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
  3. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
  4. 即把10个字符分别赋给str[0]到str[9]10个元素
  5. 如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '/0' )。
  6. 2、字符数组与字符串
  7. 在c语言中,将字符串作为字符数组来处理。(c++中不是)
  8. 在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'/0’代表。如果有一个字符串,其中第10个字符为'/0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'/0'时,表示字符串结束,由它前面的字符组成字符串。
  9. 系统对字符串常量也自动加一个'/0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'/0'是系统自动加上的。(通过sizeof()函数可验证)
  10. 有了结束标志'/0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'/0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如char str[ ])
  11. 说明:'/n’代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。
  12. 对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:
  13. char str[ ]={"I am happy"}; 可以省略花括号,如下所示
  14. char str[ ]="I am happy";

  15. 注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的
  16. char str[ ];
  17. str="I am happy";


  18. 不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'/0')
  19. 因此,上面的初始化与下面的初始化等价
  20. char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','/0'};
  21. 而不与下面的等价
  22. char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
  23. 前者的长度是11,后者的长度是10.
  24. 说明:字符数组并不要求它的最后一个字符为'/0',甚至可以不包含'/0',向下面这样写是完全合法的。
  25. char str[5]={'C','h','i','n','a'};
  26. ++++++++
  27. 可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。
  28. #include <stdio.h>
  29. void main(void)
  30. {
  31. char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};
  32. char c2[]="I am happy";
  33. int i1=sizeof(c1);
  34. int i2=sizeof(c2);
  35. printf("%d/n",i1);
  36. printf("%d/n",i2);
  37. }
  38. 结果:10 11
  39. 3、字符串的表示形式
  40. 在C语言中,可以用两种方法表示和存放字符串:
  41. (1)用字符数组存放一个字符串
  42. char str[ ]="I love China";
  43. (2)用字符指针指向一个字符串
  44. char* str="I love China";
  45. 对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量"I love China"直接赋给该字符串变量,这是不对的。
  46. C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。
  47. 两种表示方式的字符串输出都用
  48. printf("%s/n",str);
  49. %s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符 " /0 "。
  50. 4、对使用字符指针变量和字符数组两种方法表示字符串的讨论
  51. 虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈。
  52. 4.1、字符数组由若干个元素组成,每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)
  53. 4.2、赋值方式:
  54. 对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值
  55. char str[14];
  56. str="I love China"; (但在字符数组初始化时可以,即char str[14]="I love China";)
  57. 而对字符指针变量,采用下面方法赋值:
  58. char* a;
  59. a="I love China";
  60. 或者是 char* a="I love China"; 都可以
  61. 4.3、对字符指针变量赋初值(初始化):
  62. char* a="I love China";
  63. 等价于:
  64. char* a;
  65. a="I love China";
  66. 而对于字符数组的初始化
  67. char str[14]="I love China";
  68. 不能等价于:
  69. char str[14];
  70. str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)
  71. 4.4、如果定义了一个字符数组,那么它有确定的内存地址;而定义一个字符指针变量时,它并未指向某个确定的字符数据,并且可以多次赋值。

  72. 5、字符串处理函数 5.1
  73. char *strcat(char *str1,const char *2 );
  74. char *strcat(char *strDestination,const char *strSource );

  75. 功能:函数将字符串str2 连接到str1的末端,并返回指针str1
  76. 注:连接前两个字符串的后面都有一个' /0 ',连接时将字符串1后面的 ' /0 ‘去掉,只在新串最后保留一个 ' /0 ‘
  77. 5.2
  78. char *strcpy(char *str1,const char *2 );
  79. char *strcpy(char *strDestination,const char *strSource );
  80. 功能:复制字符串strSource中的字符到字符串strDestination,包括空值结束符。返回值为指针strDestination。
  81. 注:1、“字符数组1”必须写成数组名形式,“字符串2"可以是字符数组名,也可以是一个字符串常量
  82. 2、复制时连同字符串后面的 ' /0 ' 一起复制到数组1中
  83. 3、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是一样的),而只能用strcpy函数处理。
  84. 4、可以用strcpy函数将字符串2中的前若干个字符复制到字符数组1中去。
复制代码
扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-4107772-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版