zoukankan      html  css  js  c++  java
  • 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函数,结果就不正确了。

  • 相关阅读:
    [AngularFire 2] Protect Write Access Using Security Rules
    [Ramda] Handle Branching Logic with Ramda's Conditional Functions
    [Angular2 Router] Setup page title with Router events
    [HTML] Creating visual skip links in HTML and CSS
    [AngularFire2] Signup and logout
    [AngularFire2] Building an Authentication Observable Data Service
    [Swift] Add Scroll View
    [Swift] Storyboard outlet and action
    [AngularFire2] Auth with Firebase auth -- email
    网站优化与Cdn文件传输服务
  • 原文地址:https://www.cnblogs.com/qipaopao001120/p/12501414.html
Copyright © 2011-2022 走看看