2020.3.15 第三次作业

一、学习笔记

学习范围:8.2.2  动态内存分配,8.3.1  单字符输入输出,8.3.2  字符串数组,8.4.1  函数strlen,8.4.2  函数strcmp,8.4.3  函数strcpy,8.4.4  字符串中找字符

 

二、相关程序

三、存在问题

1.什么是行编辑?

答:一行行接受用户从终端输入的程序或数据,并存入用户的数据区

2.什么是‘shell’?

答:shell就是在操作系统和应用程序之间的一个命令翻译工具。

3.什么是缓冲区?

答:缓冲区又称为缓存,是内存空间的预留部分,主要用来缓冲输入或输出的数据,根据其对应的是输入还是输出设备,分为输入缓冲区和输出缓冲区。

4.下面描述正确的是 ( D )

解析:字符串按照顺序依次比较,如果碰到不相等的,则进行相减,得出结果,反之则得0。

5.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是( D

此题正确选项是D,但是A和B在编译器中运行时确实能够打印出ABCDE,那么A和B为何不正确那?

答:A和B中字符的定义都是字符数组的形式,并不是字符串,即末尾都没有‘’, 非字符串使用字符串函数puts来输出是不正确的。
    但是为何A和B这两种情况反倒能输出正确结果那,这就涉及到存储中的边界对齐存储的知识了:

    一个字节是8个字符,如果字符数组长度是小于8个,比如例题中的5个,那么因为边界对齐存储原因,该字节中只存放5个字符,剩下的3个字符都为0,使用puts函数输出字符数组时,就会把后面的0识别为‘’。而当数组长度是8或者8的倍数时,puts函数找不到后面的0,打印就会出现问题。
    如果我们将数组改为8个元素,那么后面的就需要读取下一个字节中的数据了,对于长度为8个元素或者8的倍数的字符数组使用puts函数,结果就不正确了。

原文地址:https://www.cnblogs.com/qipaopao001120/p/12501414.html