笨办法学C语言

《笨办法学C语言》

  • 出版社:人民邮电出版社
  • ISBN:9787115477309
  • 版次:1
  • 商品编码:12340050
  • 品牌:异步图书
  • 包装:平装
  • 开本:16开
  • 出版时间:2018-04-01
  • 用纸:胶版纸
  • 页数:306
  • 正文语种:中文
基本介绍书籍目录点评信息
  • 书籍内容

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

    编辑推荐

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

    作者简介

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

热门文章

更多