一、

第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个
第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占一个

二,字符数组与字符串的区别

C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。

<1> 定义: char c[10]

字符型与整型互相通用,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, 用整型来定义会浪费空间, 另外这样定义实际意义也不大, 只是为了说明其合法性。

<2> 初始化:

最简单的方法即逐个赋值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10个字符分别赋绐c[0]到c[9]10个元素。

如果初值个数小于数组长度,则只将这些字符赋绐数组中前面的元素,其余元素自动定为空字符(即'\0')。
    如char c[12]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 则c[10]、c[11]值都为'\0' 。

C语言中,将字符串作为字符数组来处理。一般我们用字符数组来存放字符串时,都要先确定一个足够大的数组,而实际并用不了那么多,而我们只关心其有效位,为测定字符串实际长度,C规定了一个"字符串结束标志",以字符 '\0' 代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到字符'\0'时,表示字符串结束,由它前面的字符组成字符串。
    系统对字符串常量也自动加一个'\0'作为结束符。

对于语句: pirntf("How do you do? \n"); 实际上该字符串在内存中存放时,系统自动在最后一个字符'\0'的后面加了一个'\0'作为字符串结束标志,在执行printf函数时,每输出一个字符检查一次,看下一个字符是否'\0'。遇'\0'就停止输出。

可以用字符串常量来初始化字符数组。如:

char c[]={"I am happy"};

也可直接写成:

char c[]="I am happy"; 注意此时数组的长度不是10,而是11,因为系统自动加上了'\0'结束符。

字符数组不要求最后一个字符为'\0',而为了使处理字符数组和字符串的方法一致,便于测定字符串的实际长度,能及方便在程序中处理, 在字符数组末尾也常加上一个'\0'。

<3> 字符数组的输入输出

(1) 逐个字符输入输出。用格式符"%c"输入或输出一个字符。

(2) 将整个字符串一次输入或输出。用"%S"格式符,意思是输出字符串(String)。例如:

  char c[]={"china"};
  printf("%S", c);

如果一个字符数组中包含一个以上'\0',则遇第一个'\0'时输出就结束。

(3) 若输入字符串长度超过字符数组所定义的长度时,将造成数组下标越界,但系统对此并不报错。

(4) 用%S格式输入字符时,遇空格、Tab键和回车将自动结束输入。

用scanf函数输入时, 遇到空格则认为一个字符串结束。试验如下:

#include <stdio.h>
int main()
{
    char str1[5], str2[5], str3[5];
    scanf("%s %s %s", str1, str2, str3);
    printf("%s %s %s\n", str1, str2, str3);
    return 0;
}

运行结果:
================================
how are you↙
how are you
================================

#include <stdio.h>
int main()
{
    char str[13];
    scanf("%s", str);
    printf("%s\n", str);
    return 0;
}

运行结果:
================================
how are you?↙
how
================================

由第二个程序可知,实际并未将这12个字符加上'\0'送到数组str中,而是将空格前的字符"how"送到str中,将其视为字符串处理,在其后加上'\0' 。

C语言中整形数组、字符数组、字符串的区别的更多相关文章

  1. JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)

    转载自:http://blog.csdn.net/skl_tz/article/details/9009805 JPasswordField 用作密码的输入框,似乎很方便,但是,为了得到输入的内容,一 ...

  2. 【C语言】将文本中汉字读入字符数组输出乱码

    输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大. 解决办法 将文本编码格式改成ANSI即可. 打开记事本->文件->另存为->更改编码格式-& ...

  3. C语言中的函数、数组与指针

    1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函 ...

  4. C语言博客作业—字符数组

    一.PTA实验作业 题目1:字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 (1)定义i为循环变量,number用于存放每一次转化的结果,flag用于判断是否为负数,p用于修改结果的 ...

  5. C语言中怎么求动态数组大小

    先来个简单的样例 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() keyword是求出 ...

  6. C语言博客作业--字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 Begin 定义字符型变量ch,pre=' ': 定义整型变量count://用来记录单词个数 count ...

  7. C语言博客作业--字符数组-陈张鑫

    一.PTA实验作业(4分) 题目1:7-5 查验身份证 1. 本题PTA提交列表(要提交列表,不是结果) 2. 设计思路(伪代码或流程图) 定义变量身份证个数n,合法个数count=0,flag=0, ...

  8. C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  9. C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

随机推荐

  1. mysql NULL函数 语法

    mysql NULL函数 语法 作用:如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. 说明:NULL 值的处理方式与其 ...

  2. 9.并发编程--ThreadLocal

    并发编程--ThreadLocal 1. ThreadLocal : * 线程局部变量,是一种多个线程间并发访问变量的解决方案. * 与其使用synchronized等加锁的方式,ThreadLoca ...

  3. Comparable接口与Comparator接口的比较————总结

    之前的两篇文章主要学习了Comparable接口和Comparator接口的学习.既然已经学习完了,现在就趁热打铁,进行总结吧! Comparable接口和Comparator接口的共同点: 1. 都 ...

  4. 【SpringBoot-创建项目】一.通过Idea创建SpringBoot项目

    一.首先我们通过Idea创建一个新项目 二.选择sdk和快速构建模板 三.填写项目基本信息 三.选择项目依赖 四.填写项目名和本地项目路径 六.完成项目创建,查看项目目录层级 最终:主要是在创建项目的 ...

  5. Mysql 5.7安装与配置-默认密码

    Mysql下载 官方下载路径:https://dev.mysql.com/downloads/mysql/ 网盘下载(windows 32-64): 链接:https://pan.baidu.com/ ...

  6. xsens melodic ros driver

    sudo apt-get update sudo apt-get install ros-melodic-xsens-driver 设置数据输出: // 输出四元数,加速度.角速度.地磁 python ...

  7. maven 插件的应用

    在pom.xml里配置 以测试插件介绍为主 <build> <plugins> <plugin> <groupId>org.apache.maven.p ...

  8. Linux_NetworkManager_RHEL7

    目录 目录 前言 网卡命名 RHEL7 的网卡命名规则 在RHEL7中修改回RHEL6的网卡命名规则方法 RHEL7的Network管理工具nmcli指令 nmcli指令 设置主机名 临时修改Host ...

  9. 阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系

    创建新项目,一对多 复制刚才关闭的项目的文件 复制到们的新项目里面 复制包的依赖 删减相关代码.只保留这三个查询的方法 模糊查询改成传统的占位符的方式 之前是可以自定义实体类的属性字段,和数据库的字典 ...

  10. windows7如何用键盘模拟鼠标操作

    windows7如何用键盘模拟鼠标操作 https://jingyan.baidu.com/article/6dad5075104907a123e36e38.html 听语音 37453人看了这个视频 ...