字符数组的初始化及字符串的使用

字符数组的定义

同整型数组一样:
一维数组定义:char c[10];
二维数组定义:char ch[3][4];

字符数组初始化
  1. 定义数组时初始化,如: char c[10]={'a','b','c','d'};
    • 按每个字符元素输出时,
      • 输出格式为时printf("%d\t",c[i]);则会输出字符分别对应的ASCII码,后面用0补全;
      • 输出格式为时printf("%c\t",c[i]);则会输出a b c d四个字符,后面元素自动定为空字符(’\0’),输出结果如图:
        在这里插入图片描述
    • 作为整个字符输出时:printf("%s",ch);则输出abc。
    • 由于字符型数据是以整型数据形式(ASCII码)存放,所以也可以用整型数组来存放字符数据;int a[10]; a[0]='a';缺点:容易造成内存空间的浪费,因为一个整型数据占4个字节,一个字符型数据占1个字节。
  2. 仅定义数组char c[10];后没有对数组初始化,会输出不可预估的值;如果花括号中提供的字符个数>数组长度,则会出现语法错误;
  3. 可以不写数组长度: char c[]={'a','b','c','d'};数组长度即为大括号中的字符个数。可用printf("数组长度为:%d\n",sizeof(c));验证。
  4. 用字符串常量初始化字符数组 char c[]="i am A";末尾自动加’\0’,等同于char c[]={'i',' ','a','m',' ','A','\0'},也可以把大括号去掉char c[]={"i am A"};此时数组长度为7,最后一位是’\0’。
  5. C语言中数组名代表该数组的起始地址,所以不能在初始化后重新赋值。
    如:char str1[]=“china”; str1=str2;编译错误
字符串存放

C语言中没有字符串类型,也没有字符串变量,字符串是存放在字符型数组中的。C语言将字符串作为字符数组来处理

  1. 字符串结束标志—’\0’
    • C系统在字符数组中存放字符串常量时,会自动加一个’\0’作为结束符。如果将"i am A"字符串常量存入一维数组的话,占7个字节,最后一位是’\0’。
    • ‘‘\0’代表ASCII码为0的字符,是一个空操作符,只起一个标志作用。
'\0’的作用

表示字符串结束
如:定义数组 char str1[]=“china”; 如果想用scanf(…)或者gets()对数组中的元素进行修改的话,如:

  char str1[]="china"; 
  scanf("%s",str1);
  //或gets(str1);
  puts(str1);
  /*
  for(int i=0;i<5;i++){
		printf("%c\t",str1[i]);
	}
	*/

最多可输入长度为6的字符串(包含’\0’),否则会报错;
假设输入的字符串是"ww",用scanf或者gets函数时,会自动给输入的字符串末尾加一个’\0’;所以此时数组str1中存放的元素为: w w \0 n a \0

  • 用puts()输出和for循环遍历输出的结果是不一样的:
    • puts将第一个\0前的字符串输出,输出结果为 : w w;
    • for循环是将元素一一输出,输出结果为: w w \0(不输出) n a \0(不输出) ;
  • 如果将for循环中的循环条件i<5改为i<strlen(str1)后,跟puts的输出结果是一样的。说明strlen()计算字符数组长度也是计算到第一个’\0’结束。
  • 15
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值