Programming abstractions in C阅读笔记:p127-p129

《Programming Abstractions In C》学习第51天,p127-p129,总结如下:

一、技术总结

1. string library

掌握常用函数如strlen,strcpy用法。

2.buffer overflow(缓冲区溢出)

(1)什么是buffer?

p129,Arrays that are preallocated and later use as a repository for data called buffers。

(2)什么是缓冲区溢出?

p129,Writing data past the end of an buffer is a common programming error called buffer overflow。

c 复制代码
//buffer overflow示例
char *src = "Hello";
char dst[1]; // dst称为buffer

strcpy(dst, src); // 该操作会导致buffer overflow问题

书中只是做一个简单的说明,具体可参考:

(1) wikipedia, Buffer overflow: https://en.wikipedia.org/wiki/Buffer_overflow

二、英语总结

1."The function will go ahead and copy characters right on past the end of the buffer."语法分析

答:这里的应该是The function will go ahead and (copy characters right) (on past the end of the buffer),这句话有几个要注意的地方:

(1)right

adv. exactly or all the way(完全地),指的是"一直复制/继续复制"。在原文中也有一点"强调"的意思--虽然字符串已经超过了缓冲区的长度(Buffersize),但是strcpy函数还是会复制。当然,副词在句子中往往可以忽略,直接理解为copy也是可以的。

(2)on the end

这里之所以用on, 可能是因为data对buffer而言是on,例如:I have a pimple right on the end of my nose。参考:https://ell.stackexchange.com/questions/111682/on-the-end-of-something

(3)past

这里为什么使用past呢?如果不用,那么on the end of buffer也说得通。这里之所以用past,表示已经超过了缓冲区,past取"prep. to a position that is further than a particular point"之意。

2.obligation什么意思?

答:

(1)oblige:ob-("to") + ligare("to bind"),to bind by oath(以誓言约束)。

(2)oblige > obligation:obligation的意思是"n. the fact that you are obliged to do sth"(义务,责任)

p129,"you have an obligation to check the length of the source string before you copy it using strpy"。

3.equivalent of语法分析

答:p129,"Thus,the Pig Latin equivalent of any is anyway",初看到这句话的时候心里是困惑的,因为记忆中都是把equivalent当做形容词用,后面接to。这里接of,那么就是用作名词:n. sth that has the same amount,value, purpose etc as sth else。

三、参考资料

1. 编程

(1)Eric S.Roberts,《Programming Abstractions in C》:https://book.douban.com/subject/2003414

2. 英语

(1)Etymology Dictionary:https://www.etymonline.com

(2) Cambridage Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

相关推荐
阿崽meitoufa3 分钟前
JVM虚拟机:垃圾收集器和判断对象是否存活的算法
java·jvm·算法
我是苏苏27 分钟前
C#高级:使用ConcurrentQueue做一个简易进程内通信的消息队列
java·windows·c#
fanged44 分钟前
STM32(5)--HAL1(TODO)
笔记
楼田莉子1 小时前
Linux学习之磁盘与Ext系列文件
linux·运维·服务器·c语言·学习
StandbyTime2 小时前
C语言学习-菜鸟教程C经典100例-练习27
c语言
heartbeat..2 小时前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
PXM的算法星球2 小时前
【操作系统】哲学家就餐问题实现详解
java
2301_815357702 小时前
Java项目架构从单体架构到微服务架构的发展演变
java·微服务·架构
Ethan-D2 小时前
#每日一题19 回溯 + 全排列思想
java·开发语言·python·算法·leetcode
grd43 小时前
RN for OpenHarmony 小工具 App 实战:屏幕尺子实现
笔记·harmonyos