编辑推荐

笨办法学C语言》会随书附赠5个多小时充满激情的视频,这是一套完整的C语言视频课程!
作者ZedA.Shaw为急于自我提高编程技能(不限语言)的C语言初学者构建了一套课程,只要跟着学,你会像迄今为止Zed教过的数百万程序员一样获得成功!只要你能自律、投入和坚持!
笨办法学C语言》内容十分浅显易读,只要花2天到1周可以读完,读完后既可以获得几千行代码的C编程经验。《笨办法学C语言》会让你的每一分钟投入都有回报。你很快能学会世界上强大的编程语言之一,成为一名C程序员。

在《笨办法学C语言》中,你将通过完成52个精心设计的习题来学会C语言。阅读书里的习题,看作者提供的视频,照着录入代码(不要复制和粘贴!),修正自己的错误,观察程序的运行。在这个过程中,你将会了解好的现代C代码长什么样子,如何有效地思考代码,如何更加有效地找出和修正错误。重要地是,你将掌握严密的防御性编程技术,不管你使用什么编程语言,利用这些技术你都可以创建避免缺陷并抵御恶意行为的软件。《笨办法学C语言》通过实用的项目,让你学以致用,从而对自己新学会的技能更有信心。Zed将教会你编写出色的C代码所需具备的诸多关键技能。

内容简介

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

作者简介

作者简介
泽德A.肖(ZedA.Shaw)是一位狂热的吉他手、程序员和编程书作家。他的
书教会了世界各地的上百万人如何编写软件。他的《笨办法学Python》和《笨办法学
Ruby》《》(这两《笨办法学C语言》都已出到第3版)在全球拥有数百万读者。他编写的软件大大
小小的企业都在使用。他的文章经常被众多极客圈的人阅读和引用。他是一位活
跃而有趣的作家,他会让你大笑,也会让你思考。

译者简介
Wang巍巍是一名受软件和编程的吸引,从硬件测试做到软件测试,又从软件测试做到软件开发的IT从业人员。代码和翻译是他的两大爱好,此外他还喜欢在网上撰写和翻译一些不着边际的话题和文章。如果读者对书中的内容有疑问,或者发现了书中的错误,再或者只是想随便聊聊,请通过电子邮件(wangweiwei@outlook.com)与他联系。

目录

目录

习题0 准备工作1
Linux1
MacOSX1
Windows2
文本编辑器2
习题1 打开尘封的编译器4
代码详解4
应该看到的结果5
如何破坏程序5
附加任务6
习题2 使用Makefile构建程序7
使用make7
应该看到的结果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,else28
应该看到的结果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.h79
应该看到的结果82
CPP如何扩展宏82
附加任务84
习题20 调试技巧85
调试打印和GDB85
调试策略86
附加任务87
习题21 数据类型与流程控制88
可用数据类型88
类型修饰符88
类型限定符89
类型转换89
类型大小89
可用运算符91
数学运算符92
数据运算符92
逻辑运算符92
位运算符93
布尔运算符93
赋值运算符93
可用的控制结构94
附加任务94
习题22 栈、作用域和全局变量95
ex22.c和ex22.h95
ex22_main.c97
应该看到的结果99
作用域、栈和bug100
如何破坏程序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
Makefile129
开头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_sort194
如何改进程序195
附加任务196
习题36 更安全的字符串197
为什么C语言的字符串糟透了197
使用bstrlib198
学习库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
ApachePortableRuntime247
项目布局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
加强Makefile286
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

其他推荐