×
超值优惠券
¥50
100可用 有效期2天

全场图书通用(淘书团除外)

关闭
图文详情
  • ISBN:9787115477309
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:306
  • 出版时间:2018-04-01
  • 条形码:9787115477309 ; 978-7-115-47730-9

本书特色

这本书的目标是让读者掌握足够的C语言技能,从而可以自己用C语言编写程序或者修改别人的C语言代码,成为一名的程序员。但这并不完全是一本讲C语言编程的书,书中还重点介绍防御性编程。本书以习题的方式引导读者一步一步学习编程,结构非常简单,共包括52个习题,每一个习题都重点讲解一个重要的主题,多数是以代码开始,然后解释代码的编写,再运行并测试程序,给出附加任务。此外,每个习题都配套教学视频。 本书是写给学过编程语言的读者的,本书有趣、简单,并且讲解方法独特,让读者了解众多C语言的基础知识和C程序中常见的缺陷,在慢慢增强自己的技术能力的同时,深入了解怎样破坏程序,以及怎样让代码更安全。

内容简介

本书会随书附赠5个多小时充满激情的视频,这是一套完整的C语言视频课程! 作者Zed A.Shaw为急于自我提高编程技能(不限语言)的C语言初学者构建了一套课程,只要跟着学,你会像迄今为止Zed教过的数百万程序员一样获得成功!只要你能自律、投入和坚持! 本书内容十分浅显易读,只要花2天到1周可以读完,读完后既可以获得几千行代码的C编程经验。本书会让你的每一分钟投入都有回报。你很快能学会世界上强大的编程语言之一,成为一名C程序员。 在本书中,你将通过完成52个精心设计的习题来学会C语言。阅读书里的习题,看作者提供的视频,照着录入代码(不要复制和粘贴!),修正自己的错误,观察程序的运行。在这个过程中,你将会了解好的现代C代码长什么样子,如何有效地思考代码,如何更加有效地找出和修正错误。重要地是,你将掌握严密的防御性编程技术,不管你使用什么编程语言,利用这些技术你都可以创建避免缺陷并抵御恶意行为的软件。本书通过实用的项目,让你学以致用,从而对自己新学会的技能更有信心。Zed将教会你编写出色的C代码所需具备的诸多关键技能。

目录

目录



习题0 准备工作 1

Linux 1

Mac OS X 1

Windows 2

文本编辑器 2

习题1 打开尘封的编译器 4

代码详解 4

应该看到的结果 5

如何破坏程序 5

附加任务 6

习题2 使用Makefile构建程序 7

使用make 7

应该看到的结果 8

如何破坏程序 9

附加任务 9

习题3 格式化打印 10

应该看到的结果 10

外部研究 11

如何破坏程序 11

附加任务 12

习题4 使用调试器 13

GDB小技巧 13

GDB快速参考 13

LLDB快速参考 14

习题5 记忆C语言运算符 15

如何记忆 15

运算符列表 16

习题6 记忆C语言语法 19

关键字 19

语法结构 20

鼓励的话 23

告诫的话 24

习题7 变量和类型 25

你应该看到的结果 26

如何破坏程序 27

附加任务 27

习题8 if, else-if, else 28

应该看到的结果 29

如何破坏程序 29

附加任务 30

习题9 while循环和布尔表达式 31

应该看到的结果 31

如何破坏程序 32

附加任务 32

习题10 switch语句 33

应该看到的结果 35

如何破坏程序 36

附加任务 36

习题11 数组和字符串 37

应该看到的结果 38

如何破坏程序 39

附加任务 39

习题12 数组和大小 41

应该看到的结果 42

如何破坏程序 43

附加任务 43

习题13 for循环和字符串数组 44

应该看到的结果 45

理解字符串数组 46

如何破坏程序 46

附加任务 46

习题14 编写和使用函数 47

应该看到的结果 48

如何破坏程序 49

附加任务 49

习题15 指针,可怕的指针 50

应该看到的结果 52

解释指针 53

指针的实际应用 54

指针词汇表 54

指针不是数组 54

如何破坏程序 55

附加任务 55

习题16 结构体和指向结构体的指针 56

应该看到的结果 59

什么是结构体 59

如何破坏程序 60

附加任务 60

习题17 内存分配:堆和栈 61

应该看到的结果 67

堆分配和栈分配的区别 67

如何破坏程序 68

附加任务 69

习题18 指向函数的指针 70

应该看到的结果 74

如何破坏程序 74

附加任务 75

习题19 Zed的强悍的调试宏 76

C语言错误处理的问题 76

调试宏 77

使用dbg.h 79

应该看到的结果 82

CPP如何扩展宏 82

附加任务 84

习题20 调试技巧 85

调试打印和GDB 85

调试策略 86

附加任务 87

习题21 数据类型与流程控制 88

可用数据类型 88

类型修饰符 88

类型限定符 89

类型转换 89

类型大小 89

可用运算符 91

数学运算符 92

数据运算符 92

逻辑运算符 92

位运算符 93

布尔运算符 93

赋值运算符 93

可用的控制结构 94

附加任务 94

习题22 栈、作用域和全局变量 95

ex22.c和ex22.h 95

ex22_main.c 97

应该看到的结果 99

作用域、栈和bug 100

如何破坏程序 101

附加任务 101

习题23 达夫设备 102

应该看到的结果 105

谜底 105

何必呢 106

附加任务 106

习题24 输入、输出、文件 107

应该看到的结果 109

如何破坏程序 110

I/O函数 110

附加任务 111

习题25 变参函数 112

应该看到的结果 116

如何破坏程序 116

附加任务 116

习题26 logfind项目 117

logfind的需求 117

习题27 创造性与防御性编程 118

创造性程序员思维模式 118

防御性程序员思维模式 119

防御性编程的八个策略 119

应用八大策略 120

信任输入 120

预防错误 122

尽早出错,公开出错 123

记录假设 124

预防优先,文档其次 124

自动化一切 125

简洁明了 125

质疑 126

次序不重要 126

附加任务 127

习题28 Makefile中级课程 128

基本项目结构 128

Makefile 129

开头 130

构建目标 131

单元测试 132

清理 133

安装 133

检查工具 134

应该看到的结果 134

附加任务 135

习题29 库和链接 136

动态加载共享库 137

应该看到的结果 139

如何破坏程序 140

附加任务 141

习题30 自动化测试 142

为测试框架连线 143

附加任务 147

习题31 常见未定义行为 148

重要的20个未定义行为 149

常见的未定义行为 149

习题32 双链表 153

什么是数据结构 153

创建库 153

双链表 154

定义 155

实现 156

测试 160

应该看到的结果 162

如何改进程序 163

附加任务 163

习题33 链表算法 164

冒泡排序和归并排序 164

单元测试 165

实现 167

应该看到的结果 170

如何改进程序 170

附加任务 171

习题34 动态数组 172

优势和劣势 180

如何改进程序 180

附加任务 181

习题35 排序和搜索 182

基数排序和二分搜索 185

C语言的联合体 186

实现 188

RadixMap_find与二分搜索 194

RadixMap_sort和radix_sort 194

如何改进程序 195

附加任务 196

习题36 更安全的字符串 197

为什么C语言的字符串糟透了 197

使用bstrlib 198

学习库 199

习题37 散列表 201

单元测试 208

如何改进程序 211

附加任务 211

习题38 散列表算法 213

应该看到的结果 218

如何破坏程序 219

附加任务 220

习题39 字符串算法 221

应该看到的结果 228

分析结果 230

附加任务 231

习题40 二叉搜索树 232

如何改进程序 245

附加任务 245

习题41 devpkg项目 246

devpkg是什么 246

我们要实现的东西 246

设计 247

Apache Portable Runtime 247

项目布局 248

其他依赖 249

Makefile文件 249

源代码文件 250

DB函数 251

shell函数 254

命令函数 259

devpkg主函数 264

zui后的挑战 267

习题42 栈与队列 268

应该看到的结果 271

如何改进程序 272

附加任务 272

习题43 简单的统计引擎 273

滚动标准差和平均值 273

实现 274

如何使用这个引擎 279

附加任务 280

习题44 环形缓冲区 281

单元测试 284

应该看到的结果 284

如何改进程序 285

附加任务 285

习题45 简单的TCP/IP客户端 286

加强Makefile 286

netclient的代码 286

应该看到的结果 290

如何破坏程序 291

附加任务 291

习题46 三元搜索树 292

优点和缺点 300

如何改进程序 300

附加任务 301

习题47 快速URL路由 302

应该看到的结果 305

如何改进程序 305

附加任务 306

习题48 简单网络服务器 307

规格说明 307

习题49 统计服务器 308

规格说明 308

习题50 统计数据的路由 309

习题51 存储统计数据 310

软件规格 310

习题52 入侵和改进你的服务器 311

接下来的路 312

展开全部

作者简介

作者简介 泽德 A. 肖(Zed A.Shaw) 是一位狂热的吉他手、程序员和编程书作家。他的 书教会了世界各地的上百万人如何编写软件。他的《笨办法学Python》和《笨办法学 Ruby》《》(这两本书都已出到第3版)在全球拥有数百万读者。他编写的软件大大 小小的企业都在使用。他的文章经常被众多极客圈的人阅读和引用。他是一位活 跃而有趣的作家,他会让你大笑,也会让你思考。 译者简介 Wang巍巍是一名受软件和编程的吸引,从硬件测试做到软件测试,又从软件测试做到软件开发的IT从业人员。代码和翻译是他的两大爱好,此外他还喜欢在网上撰写和翻译一些不着边际的话题和文章。如果读者对书中的内容有疑问,或者发现了书中的错误,再或者只是想随便聊聊,请通过电子邮件(wangweiwei@outlook.com)与他联系。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航