-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
650 lines (571 loc) · 86.3 KB
/
atom.xml
File metadata and controls
650 lines (571 loc) · 86.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>ClarWan Blog</title>
<subtitle>.net程序员,时间管理,自我管理,阅读,写作,程序员的自留地</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://yoursite.com/"/>
<updated>2017-11-01T16:07:12.065Z</updated>
<id>http://yoursite.com/</id>
<author>
<name>ClarWan</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>2017年读书计划</title>
<link href="http://yoursite.com/2017/11/01/2017%E8%AF%BB%E4%B9%A6%E8%AE%A1%E5%88%92/"/>
<id>http://yoursite.com/2017/11/01/2017读书计划/</id>
<published>2017-11-01T15:07:24.000Z</published>
<updated>2017-11-01T16:07:12.065Z</updated>
<content type="html"><![CDATA[<h1 id="2017年读书计划"><a href="#2017年读书计划" class="headerlink" title="2017年读书计划"></a>2017年读书计划</h1><p>2017年马上就要过去了,还有很多事情没做。明日复明日,现在列一下我现在的技术做个待看的计划。坚持下去。keep going</p>
<h2 id="编程书籍列表"><a href="#编程书籍列表" class="headerlink" title="编程书籍列表"></a>编程书籍列表</h2><h3 id="C-、ASP-NET-方面的"><a href="#C-、ASP-NET-方面的" class="headerlink" title="C#、ASP.NET 方面的"></a>C#、ASP.NET 方面的</h3><ol>
<li><p>Learing hard C# 学习笔记:<br> 这是一本入门的书,工作1到2年左右的同学可以看看,讲的浅显易懂,我当时学习的时候把里面的例子大概敲了一遍。收获很多!</p>
</li>
<li><p>ASP.NET MVC 4 Web编程笔记:<br> 工作之后因为做项目的原因,和工作需要当时做.net 开发。大多数公司也正好采用了MVC的开发模式所以买了这本书,找工作的时候花了大概1、2个星期的时间看了一下也很不错。主要面向ASP.NET MVC 网站开发的.NET工程师。主要内容包括以下方面<br> 1 ASP.NET MVC与 ASP.NET Web From框架的底层差别<br> 2 Web应用程序架构设计、网站性能优化<br> 3 jQuery框架进行客户端框架开发<br> 4 Ajax实现网站无刷新交互<br> 5 Entity FrameWork与Web数据交互<br> 6 各种Cache缓存机制<br> 7 开发ASP.NET Web API 服务<br> 8 移动设备开发网站<br> 9 错误处理、自动化测试、以及自动化生成技术<br> 10 部署ASP.NET MVC4 应用程序<br> 11 OOP面向对象编程和Web框架设计<br> 12 ASP.NET MVC4 开发实践经验和指导原则</p>
</li>
<li><p>CLR via C# (未读完):<br> 主要讲 CLR公共语言运行时 的工作原理以及其提供的功能是一本非常不错的书</p>
</li>
<li><p>C# in Depth Third Edition 深入理解C# (大概看了80%)<br> 主要讲C#语言相关特性C#2.0以后特性。<br> 比如开始第一部分的C#基础知识等<br> 第二部分C#中的泛型、委托和类型系统等<br> 第三部分主要讲了 智能提示和Lambda表达式以及扩展方法以及LINQ<br> 第四部分C#的交互性改善Com互操作性和静态语言中的动态绑定dynamic关键字<br> 第五部分 简化的异步编程 C#4.0以及5.0之后的async/await 进行异步编程</p>
</li>
<li><p>More Effective C# 改善C#程序的50个具体办法(未看完)<br> 看了一部分还有其他类似的改善C#程序的200个方法等书只有PDF版本的,需要抽看拿下消化掉。</p>
</li>
</ol>
<h3 id="编程技巧和软件工程相关"><a href="#编程技巧和软件工程相关" class="headerlink" title="编程技巧和软件工程相关"></a>编程技巧和软件工程相关</h3><ol>
<li><p>CODE COMPLETE 代码大全(未看)<br> 公司的书,进公司的时候主管拿给我看的,是一本大部头,只能看一看其中某一方面的部分了,比如关于语句和代码改善的部分。</p>
</li>
<li><p>算法导论 (未看)</p>
</li>
<li><p>大话数据结构 (未看)</p>
</li>
<li><p>啊哈算法 (看了20%左右)</p>
</li>
</ol>
<h2 id="计划"><a href="#计划" class="headerlink" title="计划"></a>计划</h2><p>主要看看数据结构和算法方面的吧,打算在编程方面能继续深入一点,愿望是能够学习之后能有自己的看法和观点,总结知识点融汇贯通吧!</p>
]]></content>
<summary type="html">
<h1 id="2017年读书计划"><a href="#2017年读书计划" class="headerlink" title="2017年读书计划"></a>2017年读书计划</h1><p>2017年马上就要过去了,还有很多事情没做。明日复明日,现在列一下我现在的技术做个待
</summary>
<category term="读书计划" scheme="http://yoursite.com/categories/%E8%AF%BB%E4%B9%A6%E8%AE%A1%E5%88%92/"/>
<category term="读书计划" scheme="http://yoursite.com/tags/%E8%AF%BB%E4%B9%A6%E8%AE%A1%E5%88%92/"/>
</entry>
<entry>
<title>C 语言学习笔记基本语法和知识点</title>
<link href="http://yoursite.com/2017/10/30/C%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<id>http://yoursite.com/2017/10/30/C语言学习笔记/</id>
<published>2017-10-30T11:00:24.000Z</published>
<updated>2017-11-01T16:06:27.321Z</updated>
<content type="html"><![CDATA[<h1 id="C-语言学习笔记"><a href="#C-语言学习笔记" class="headerlink" title="C 语言学习笔记"></a>C 语言学习笔记</h1><p>最近工作之余学习一下c语言,先说一下我的 学习经历:在学校的时候学过C#和java仅仅和一些前端方面的html、js和简单的数据库sql语句。后来毕业工作了之后主要做.net程序开发bs和cs都接触过。现在学习一下C语言这门经典的编程语言。</p>
<h2 id="C-和-C"><a href="#C-和-C" class="headerlink" title="C# 和 C"></a>C# 和 C</h2><p>记得刚开始学习C#的时候老师就说过C#是一种面向对象的高级语言。</p>
<p>这是网上的简介: C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。<br>C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。<br>这么广泛的语言肯定是要学习一下!</p>
<h2 id="个人感觉"><a href="#个人感觉" class="headerlink" title="个人感觉"></a>个人感觉</h2><p>说一下两种语言的一些基本想通的地方,C语言要早于C#出现主要是解决不同机器平台上汇编语言指令,将汇编语言的共同点提取出来了,可以在不同的机器上编译。可以说是一种高级汇编语言,适合于一些直接和硬件打交道的软件,比如驱动程序,和单片机控制程序等</p>
<h3 id="相同的"><a href="#相同的" class="headerlink" title="相同的"></a>相同的</h3><ul>
<li>基本数据结构、变量、常量</li>
<li>运算符、判断、和循环</li>
<li>函数</li>
<li>字符串 结构体(可能有所不同)</li>
<li>main函数主程序的入口点</li>
</ul>
<h3 id="不同"><a href="#不同" class="headerlink" title="不同"></a>不同</h3><p>C# 没有指针的概念<br>C# 不需要预处理和头文件</p>
<h2 id="一些关键字和概念"><a href="#一些关键字和概念" class="headerlink" title="一些关键字和概念"></a>一些关键字和概念</h2><h3 id="变量的定义"><a href="#变量的定义" class="headerlink" title="变量的定义"></a>变量的定义</h3><p>type variable_list<br>type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double、bool 或任何用户自定义的对象</p>
<p><strong>extern</strong> int d = 3, f = 5; // d 和 f 的声明与初始化<br><strong>extern</strong> 关键字<br>变量的声明有两种情况:<br>1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。<br>2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。<br>除非有extern关键字,否则都是变量的定义。<br>extern int i; //声明,不是定义<br>int i; //声明,也是定义</p>
<h3 id="存储类"><a href="#存储类" class="headerlink" title="存储类"></a>存储类</h3><blockquote>
<ul>
<li><p><strong>auto</strong> 局部变量默认存储类,类似C# 中局部变量默认private</p>
</li>
<li><p><strong>register 存储类</strong>用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。</p>
</li>
<li><strong>static 存储类</strong> 指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。<br>static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。<br>static 是全局变量的默认存储类,以下两个变量 (count 和 road) 都有一个 static 存储类。</li>
</ul>
</blockquote>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">static int Count;</div><div class="line">int Road;</div><div class="line"></div><div class="line">main()</div><div class="line">{</div><div class="line"> printf("%d\n", Count);</div><div class="line"> printf("%d\n", Road);</div><div class="line">}</div></pre></td></tr></table></figure>
<blockquote>
<ul>
<li><strong>extern 存储类</strong><br>extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。<br>当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。<br>类似 java或C#中的 public</li>
</ul>
</blockquote>
<h3 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h3><ul>
<li>算术运算符</li>
<li>关系运算符</li>
<li>逻辑运算符</li>
<li>位运算符</li>
<li>赋值运算符</li>
<li>杂项运算符</li>
</ul>
<table>
<thead>
<tr>
<th>运算符</th>
<th style="text-align:left">描述</th>
<th style="text-align:left">实例</th>
</tr>
</thead>
<tbody>
<tr>
<td>+</td>
<td style="text-align:left">把两个操作数相加</td>
<td style="text-align:left">A + B 将得到 30</td>
</tr>
<tr>
<td>-</td>
<td style="text-align:left">从第一个操作数中减去第二个操作数</td>
<td style="text-align:left">A - B 将得到 -10</td>
</tr>
<tr>
<td>*</td>
<td style="text-align:left">自减运算符,整数值减少 1</td>
<td style="text-align:left">A * B 将得到 200</td>
</tr>
<tr>
<td>/</td>
<td style="text-align:left">分子除以分母</td>
<td style="text-align:left">B / A 将得到 2</td>
</tr>
<tr>
<td>%</td>
<td style="text-align:left">分子除以分母</td>
<td style="text-align:left">B % A 将得到 0</td>
</tr>
<tr>
<td>++</td>
<td style="text-align:left">自增运算符,整数值增加 1</td>
<td style="text-align:left">A++ 将得到 11</td>
</tr>
<tr>
<td>–</td>
<td style="text-align:left">自减运算符,整数值减少 1</td>
<td style="text-align:left">A– 将得到 9</td>
</tr>
</tbody>
</table>
<p>位运算符<br>位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:</p>
<table>
<thead>
<tr>
<th>p</th>
<th>q</th>
<th>p & q</th>
<th>p | q</th>
<th style="text-align:right">p ^ q</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td style="text-align:right">0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td style="text-align:right">1</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td style="text-align:right">0</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td style="text-align:right">1</td>
</tr>
</tbody>
</table>
<h3 id="判断符"><a href="#判断符" class="headerlink" title="判断符"></a>判断符</h3><p>if<br>if…else<br>if…else if…else;<br>switch语句</p>
<h3 id="循环"><a href="#循环" class="headerlink" title="循环"></a>循环</h3><p>for 循环<br>while 循环</p>
<h3 id="函数"><a href="#函数" class="headerlink" title="函数"></a>函数</h3><p><strong>定义函数</strong><br>C 语言中的函数定义的一般形式如下:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">return_type function_name( parameter list )</div><div class="line">{</div><div class="line"> body of the function</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h3 id="数组"><a href="#数组" class="headerlink" title="数组"></a>数组</h3><p><strong>声明数组</strong><br>在 C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:<br><figure class="highlight plain"><figcaption><span>arrayName [ arraySize ];```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:</div><div class="line">```double balance[10];</div></pre></td></tr></table></figure></p>
<p><strong>初始化数组</strong><br>在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示:<br><figure class="highlight plain"><figcaption><span>balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。</div><div class="line">如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:</div><div class="line">```double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};</div></pre></td></tr></table></figure></p>
<h3 id="C-指针"><a href="#C-指针" class="headerlink" title="C 指针"></a>C 指针</h3><p>学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。<br>正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:</p>
<p><strong>什么是指针?</strong><br>指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:<br><figure class="highlight plain"><figcaption><span>*var-name;```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">在这里,type 是指针的基类型,它必须是一个有效的 C 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:</div></pre></td></tr></table></figure></p>
<p>int <em>ip; /</em> 一个整型的指针 <em>/<br>double </em>dp; /<em> 一个 double 型的指针 </em>/<br>float <em>fp; /</em> 一个浮点型的指针 <em>/<br>char </em>ch; /<em> 一个字符型的指针 </em>/<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line">所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。</div><div class="line"></div><div class="line">**C 指针详解**</div><div class="line">在 C 中,有很多指针相关的概念,这些概念都很简单,但是都很重要。下面列出了 C 程序员必须清楚的一些与指针相关的重要概念:</div><div class="line"></div><div class="line">* [指针的算术运算](http://www.runoob.com/cprogramming/c-pointer-arithmetic.html) 可以对指针进行四种算术运算:++、--、+、-</div><div class="line">* [指针数组](http://www.runoob.com/cprogramming/c-array-of-pointers.html) 可以定义用来存储指针的数组。</div><div class="line">* [指向指针的指针](http://www.runoob.com/cprogramming/c-pointer-to-pointer.html) C 允许指向指针的指针。</div><div class="line">* [传递指针给函数](http://www.runoob.com/cprogramming/c-passing-pointers-to-functions.html) 通过引用或地址传递参数,使传递的参数在调用函数中被改变。</div><div class="line">* [从函数返回指针](http://www.runoob.com/cprogramming/c-return-pointer-from-functions.html) C 允许函数返回指针到局部变量、静态变量和动态内存分配。</div><div class="line"></div><div class="line"></div><div class="line">### 函数指针</div><div class="line"></div><div class="line">函数指针是指向函数的指针变量。</div><div class="line">通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。</div><div class="line">函数指针可以像一般函数一样,用于调用函数、传递参数。</div><div class="line">函数指针变量的声明:</div></pre></td></tr></table></figure></p>
<p>typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div></pre></td><td class="code"><pre><div class="line">** 回调函数 **</div><div class="line">**函数指针作为某个函数的参数**</div><div class="line">函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。</div><div class="line">简单讲:回调函数是由别人的函数执行时调用你实现的函数。</div><div class="line">实例</div><div class="line">实例中 populate_array 函数定义了三个参数,其中第三个参数是函数的指针,通过该函数来设置数组的值。</div><div class="line">实例中我们定义了回调函数 getNextRandomValue,它返回一个随机值,它作为一个函数指针传递给 populate_array 函数。</div><div class="line">populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。</div><div class="line">实例</div><div class="line">``` </div><div class="line">#include <stdlib.h> </div><div class="line">#include <stdio.h></div><div class="line"> </div><div class="line">// 回调函数</div><div class="line">void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))</div><div class="line">{</div><div class="line"> for (size_t i=0; i<arraySize; i++)</div><div class="line"> array[i] = getNextValue();</div><div class="line">}</div><div class="line"> </div><div class="line">// 获取随机值</div><div class="line">int getNextRandomValue(void)</div><div class="line">{</div><div class="line"> return rand();</div><div class="line">}</div><div class="line"> </div><div class="line">int main(void)</div><div class="line">{</div><div class="line"> int myarray[10];</div><div class="line"> populate_array(myarray, 10, getNextRandomValue);</div><div class="line"> for(int i = 0; i < 10; i++) {</div><div class="line"> printf("%d ", myarray[i]);</div><div class="line"> }</div><div class="line"> printf("\n");</div><div class="line"> return 0;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h3 id="C-字符串"><a href="#C-字符串" class="headerlink" title="C 字符串"></a>C 字符串</h3><p>在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。<br>下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。</p>
<h2 id="C-结构体"><a href="#C-结构体" class="headerlink" title="C 结构体"></a>C 结构体</h2><h3 id="定义结构"><a href="#定义结构" class="headerlink" title="定义结构"></a>定义结构</h3><p>为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">struct [structure tag]</div><div class="line">{</div><div class="line"> member definition;</div><div class="line"> member definition;</div><div class="line"> ...</div><div class="line"> member definition;</div><div class="line">} [one or more structure variables];</div></pre></td></tr></table></figure>
<p>structure tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明 Book 结构的方式:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">struct Books</div><div class="line">{</div><div class="line"> char title[50];</div><div class="line"> char author[50];</div><div class="line"> char subject[100];</div><div class="line"> int book_id;</div><div class="line">} book;</div></pre></td></tr></table></figure></p>
<h3 id="共用体"><a href="#共用体" class="headerlink" title="共用体"></a>共用体</h3><p>共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。</p>
<p>定义共用体<br>为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">union [union tag]</div><div class="line">{</div><div class="line"> member definition;</div><div class="line"> member definition;</div><div class="line"> ...</div><div class="line"> member definition;</div><div class="line">} [one or more union variables];</div></pre></td></tr></table></figure>
<p>union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,您可以指定一个或多个共用体变量,这是可选的。下面定义一个名为 Data 的共用体类型,有三个成员 i、f 和 str:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">union Data</div><div class="line">{</div><div class="line"> int i;</div><div class="line"> float f;</div><div class="line"> char str[20];</div><div class="line">} data;</div></pre></td></tr></table></figure></p>
<h3 id="C-位域"><a href="#C-位域" class="headerlink" title="C 位域"></a>C 位域</h3><p>如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">struct</div><div class="line">{</div><div class="line"> unsigned int widthValidated;</div><div class="line"> unsigned int heightValidated;</div><div class="line">} status;</div></pre></td></tr></table></figure></p>
<p>这种结构需要 8 字节的内存空间,但在实际上,在每个变量中,我们只存储 0 或 1。在这种情况下,C 语言提供了一种更好的利用内存空间的方式。如果您在结构内使用这样的变量,您可以定义变量的宽度来告诉编译器,您将只使用这些字节。例如,上面的结构可以重写成:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">struct</div><div class="line">{</div><div class="line"> unsigned int widthValidated : 1;</div><div class="line"> unsigned int heightValidated : 1;</div><div class="line">} status;</div></pre></td></tr></table></figure>
<h3 id="C-typedef"><a href="#C-typedef" class="headerlink" title="C typedef"></a>C typedef</h3><p>C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:<br><figure class="highlight plain"><figcaption><span>unsigned char BYTE;```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">### C 输入 & 输出</div><div class="line"></div><div class="line">文件指针是访问文件的方式,本节将讲解如何从屏幕读取值以及如何把结果输出到屏幕上。</div><div class="line">C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。</div><div class="line">scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。</div><div class="line"></div><div class="line">**getchar() & putchar() 函数**</div><div class="line">int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。</div><div class="line">int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。</div><div class="line">请看下面的实例:</div><div class="line">实例</div></pre></td></tr></table></figure></p>
<p>#include <stdio.h></stdio.h></p>
<p>int main( )<br>{<br> int c;</p>
<p> printf( “Enter a value :”);<br> c = getchar( );</p>
<p> printf( “\nYou entered: “);<br> putchar( c );<br> printf( “\n”);<br> return 0;<br>}<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">当上面的代码被编译和执行时,它会等待您输入一些文本,当您输入一个文本并按下回车键时,程序会继续并只会读取一个单一的字符,显示如下:</div></pre></td></tr></table></figure></p>
<p>$./a.out<br>Enter a value :runoob</p>
<p>You entered: r<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">**scanf() 和 printf() 函数**</div><div class="line">int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。</div><div class="line">int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。</div><div class="line">format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。还有许多其他可用的格式选项,可以根据需要使用。如需了解完整的细节,可以查看这些函数的参考手册。现在让我们通过下面这个简单的实例来加深理解:</div><div class="line">实例</div></pre></td></tr></table></figure></p>
<p>#include <stdio.h><br>int main( ) {</stdio.h></p>
<p> char str[100];<br> int i;</p>
<p> printf( “Enter a value :”);<br> scanf(“%s %d”, str, &i);</p>
<p> printf( “\nYou entered: %s %d “, str, i);<br> printf(“\n”);<br> return 0;<br>}<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">当上面的代码被编译和执行时,它会等待您输入一些文本,当您输入一个文本并按下回车键时,程序会继续并读取输入,显示如下:</div></pre></td></tr></table></figure></p>
<p>$./a.out<br>Enter a value :runoob 123</p>
<p>You entered: runoob 123<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div></pre></td><td class="code"><pre><div class="line">**在这里,应当指出的是,scanf() 期待输入的格式与您给出的 %s 和 %d 相同,这意味着您必须提供有效的输入,比如 "string integer",如果您提供的是 "string string" 或 "integer integer",它会被认为是错误的输入。另外,在读取字符串时,只要遇到一个空格,scanf() 就会停止读取,所以 "this is test" 对 scanf() 来说是三个字符串。**</div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line">### C语言中printf 格式化输出函数</div><div class="line">一直记不住,在网上找了一段笔记</div><div class="line"></div><div class="line">C语言中规定数据输出方式,具体如下:</div><div class="line"></div><div class="line">1.type 含义如下:</div><div class="line"></div><div class="line">d 有符号10进制整数 </div><div class="line">%d 有符号10进制整数 %ld 长整型 %hd短整型 </div><div class="line"></div><div class="line">%i 有符号10进制整数 (%i和%d 没有区别,%i 是老式写法,都是整型格式。)</div><div class="line"></div><div class="line">%o 无符号8进制整数 </div><div class="line"></div><div class="line">%u 无符号10进制整数</div><div class="line">%hu 无符号短整形 %u无符号整形 %lu无符号长整形</div><div class="line"></div><div class="line">%x 无符号的16进制数字,并以小写abcdef表示</div><div class="line"></div><div class="line">%X 无符号的16进制数字,并以大写ABCDEF表示</div><div class="line"></div><div class="line">%f:输入输出为浮点型 %lf双精度浮点型</div><div class="line"></div><div class="line">%E/e 用科学表示格式的浮点数</div><div class="line"></div><div class="line">%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数</div><div class="line"></div><div class="line">%c 输入输出为单个字符 </div><div class="line"></div><div class="line">%s 输入输出为字符串</div><div class="line"></div><div class="line">% 显示百分号本身</div><div class="line"></div><div class="line"> </div><div class="line">## C 文件读写</div><div class="line">**C 文件读写**</div><div class="line"> C 程序员如何创建、打开、关闭文本文件或二进制文件。</div><div class="line">一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。</div><div class="line">**打开文件**</div><div class="line">您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:</div><div class="line">```FILE *fopen( const char * filename, const char * mode );</div></pre></td></tr></table></figure></p>
<p>在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:</p>
<table>
<thead>
<tr>
<th>模式</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td>打开一个已有的文本文件,允许读取文件。</td>
</tr>
<tr>
<td>w</td>
<td>打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。</td>
</tr>
<tr>
<td>a</td>
<td>打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。</td>
</tr>
<tr>
<td>r+</td>
<td>打开一个文本文件,允许读写文件。</td>
</tr>
<tr>
<td>w+</td>
<td>打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。</td>
</tr>
<tr>
<td>a+</td>
<td>打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。</td>
</tr>
</tbody>
</table>
<p>如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:<br><code>"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"</code></p>
<p><strong>关闭文件</strong><br>为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:<br> <figure class="highlight plain"><figcaption><span>fclose( FILE *fp );```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h 中的常量。</div><div class="line">C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。</div><div class="line"></div><div class="line">**写入文件**</div><div class="line">下面是把字符写入到流中的最简单的函数:</div><div class="line">```int fputc( int c, FILE *fp );</div></pre></td></tr></table></figure></p>
<p>函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。您可以使用下面的函数来把一个以 null 结尾的字符串写入到流中:<br><figure class="highlight plain"><figcaption><span>fputs( const char *s, FILE *fp );```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。您也可以使用 int fprintf(FILE *fp,const char *format, ...) 函数来写把一个字符串写入到文件中。尝试下面的实例:</div><div class="line">注意:请确保您有可用的 /tmp 目录,如果不存在该目录,则需要在您的计算机上先创建该目录。</div><div class="line">实例</div></pre></td></tr></table></figure></p>
<p>#include <stdio.h></stdio.h></p>
<p>int main()<br>{<br> FILE *fp = NULL;</p>
<p> fp = fopen(“/tmp/test.txt”, “w+”);<br> fprintf(fp, “This is testing for fprintf…\n”);<br> fputs(“This is testing for fputs…\n”, fp);<br> fclose(fp);<br>}<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">当上面的代码被编译和执行时,它会在 /tmp 目录中创建一个新的文件 test.txt,并使用两个不同的函数写入两行。接下来让我们来读取这个文件。</div><div class="line">读取文件</div><div class="line">下面是从文件读取单个字符的最简单的函数:</div><div class="line"></div><div class="line">```int fgetc( FILE * fp );</div></pre></td></tr></table></figure></p>
<p>fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。下面的函数允许您从流中读取一个字符串:</p>
<figure class="highlight plain"><figcaption><span>*fgets( char *buf, int n, FILE *fp );```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。</div><div class="line">如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。您也可以使用</div><div class="line"></div><div class="line">``` int fscanf(FILE *fp, const char *format, ...)</div></pre></td></tr></table></figure>
<p>函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。<br>实例</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line">#include <stdio.h></div><div class="line"> </div><div class="line">int main()</div><div class="line">{</div><div class="line"> FILE *fp = NULL;</div><div class="line"> char buff[255];</div><div class="line"> </div><div class="line"> fp = fopen("/tmp/test.txt", "r");</div><div class="line"> fscanf(fp, "%s", buff);</div><div class="line"> printf("1 : %s\n", buff );</div><div class="line"> </div><div class="line"> fgets(buff, 255, (FILE*)fp);</div><div class="line"> printf("2: %s\n", buff );</div><div class="line"> </div><div class="line"> fgets(buff, 255, (FILE*)fp);</div><div class="line"> printf("3: %s\n", buff );</div><div class="line"> fclose(fp);</div><div class="line"> </div><div class="line">}</div></pre></td></tr></table></figure>
<p>当上面的代码被编译和执行时,它会读取上一部分创建的文件,产生下列结果:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">1 : This</div><div class="line">2: is testing for fprintf...</div><div class="line"></div><div class="line">3: This is testing for fputs...</div></pre></td></tr></table></figure></p>
<p>首先,fscanf() 方法只读取了 This,因为它在后边遇到了一个空格。其次,调用 fgets() 读取剩余的部分,直到行尾。最后,调用 fgets() 完整地读取第二行。</p>
<p><strong>二进制 I/O 函数</strong><br>下面两个函数用于二进制输入和输出:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">size_t fread(void *ptr, size_t size_of_elements, </div><div class="line"> size_t number_of_elements, FILE *a_file);</div><div class="line"> </div><div class="line">size_t fwrite(const void *ptr, size_t size_of_elements, </div><div class="line"> size_t number_of_elements, FILE *a_file);</div></pre></td></tr></table></figure></p>
<p>这两个函数都是用于存储块的读写 - 通常是数组或结构体。</p>
<h2 id="C-预处理器"><a href="#C-预处理器" class="headerlink" title="C 预处理器"></a>C 预处理器</h2><p>C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。<br>所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:</p>
<table>
<thead>
<tr>
<th>指令</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>#define</td>
<td>定义宏</td>
</tr>
<tr>
<td>#include</td>
<td>包含一个源代码文件</td>
</tr>
<tr>
<td>#undef</td>
<td>取消已定义的宏</td>
</tr>
<tr>
<td>#ifdef</td>
<td>如果宏已经定义,则返回真</td>
</tr>
<tr>
<td>#ifndef</td>
<td>如果宏没有定义,则返回真</td>
</tr>
<tr>
<td>#if</td>
<td>如果给定条件为真,则编译下面代码</td>
</tr>
<tr>
<td>#else</td>
<td>#if 的替代方案</td>
</tr>
<tr>
<td>#elif</td>
<td>如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码</td>
</tr>
<tr>
<td>#endif</td>
<td>结束一个 #if……#else 条件编译块</td>
</tr>
<tr>
<td>#error</td>
<td>当遇到标准错误时,输出错误消息</td>
</tr>
<tr>
<td>#pragma</td>
<td>使用标准化方法,向编译器发布特殊的命令到编译器中</td>
</tr>
</tbody>
</table>
<p><strong>预处理器实例</strong><br>分析下面的实例来理解不同的指令。<br><figure class="highlight plain"><figcaption><span>MAX_ARRAY_LENGTH 20 ```</span></figcaption><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">这个指令告诉 CPP 把所有的 MAX_ARRAY_LENGTH 替换为 20。使用 #define 定义常量来增强可读性。</div></pre></td></tr></table></figure></p>
<p>#include <stdio.h></stdio.h></p>
<p>#include “myheader.h”<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"></div><div class="line">### 错误处理</div><div class="line">**errno、perror() 和 strerror()***</div><div class="line"></div><div class="line">C 语言提供了 perror() 和 strerror() 函数来显示与 errno 相关的文本消息。</div><div class="line">* perror() 函数显示您传给它的字符串,后跟一个冒号、一个空格和当前 errno 值的文本表示形式。</div><div class="line">* strerror() 函数,返回一个指针,指针指向当前 errno 值的文本表示形式。</div><div class="line"></div><div class="line">让我们来模拟一种错误情况,尝试打开一个不存在的文件。您可以使用多种方式来输出错误消息,在这里我们使用函数来演示用法。另外有一点需要注意,您应该使用 stderr 文件流来输出所有的错误。</div></pre></td></tr></table></figure></p>
<p>#include <stdio.h></stdio.h></p>
<p>#include <errno.h></errno.h></p>
<p>#include <string.h></string.h></p>
<p>extern int errno ;</p>
<p>int main ()<br>{<br> FILE * pf;<br> int errnum;<br> pf = fopen (“unexist.txt”, “rb”);<br> if (pf == NULL)<br> {<br> errnum = errno;<br> fprintf(stderr, “错误号: %d\n”, errno);<br> perror(“通过 perror 输出错误”);<br> fprintf(stderr, “打开文件错误: %s\n”, strerror( errnum ));<br> }<br> else<br> {<br> fclose (pf);<br> }<br> return 0;<br>}</p>
<p>```</p>
<h2 id="C语言中的内存管理"><a href="#C语言中的内存管理" class="headerlink" title="C语言中的内存管理"></a>C语言中的内存管理</h2><table>
<thead>
<tr>
<th>序号</th>
<th>函数和描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><strong>void *calloc(int num, int size);</strong>在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。</td>
</tr>
<tr>
<td>2</td>
<td><strong>void free(void *address);</strong> 该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。</td>
</tr>
<tr>
<td>3</td>
<td><strong>void *malloc(int num);</strong> 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。</td>
</tr>
<tr>
<td>4</td>
<td><strong>void <em>realloc(void </em>address, int newsize);</strong> 该函数重新分配内存,把内存扩展到 newsize。</td>
</tr>
</tbody>
</table>
<h3 id="其他引用"><a href="#其他引用" class="headerlink" title="其他引用"></a>其他引用</h3><p>我相信你也知道计算机内部全都是用二进制表示信息。在机器中,每一条指令也是用二进制数来表示的。我们很难记住这些数和指令的对应关系,它的表现也不够直观。所以计算机科学家们开始用助记符(比如mov、jmp等)来表示指令。这被称作汇编语言。尽管相比于徒手撸机器码有进步,但是说到底汇编语言也只是很浅的一层抽象。实现一个复杂的功能,也许要写很长的一段代码。更可怕的是,许多汇编代码移植性不好,切换到另一个平台上需要改很多代码。因此开发大型软件很不方便。</p>
]]></content>
<summary type="html">
<h1 id="C-语言学习笔记"><a href="#C-语言学习笔记" class="headerlink" title="C 语言学习笔记"></a>C 语言学习笔记</h1><p>最近工作之余学习一下c语言,先说一下我的 学习经历:在学校的时候学过C#和java仅仅和一些
</summary>
<category term="C语言" scheme="http://yoursite.com/categories/C%E8%AF%AD%E8%A8%80/"/>
<category term="C语言 笔记" scheme="http://yoursite.com/tags/C%E8%AF%AD%E8%A8%80-%E7%AC%94%E8%AE%B0/"/>
<category term="C语言" scheme="http://yoursite.com/tags/C%E8%AF%AD%E8%A8%80/"/>
</entry>
<entry>
<title>17年最后一个假期</title>
<link href="http://yoursite.com/2017/10/14/17%E5%B9%B4%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E5%81%87%E6%9C%9F/"/>
<id>http://yoursite.com/2017/10/14/17年最后一个假期/</id>
<published>2017-10-13T16:00:00.000Z</published>
<updated>2017-10-14T16:49:29.688Z</updated>
<content type="html"><![CDATA[<h1 id="17年最后一个假期"><a href="#17年最后一个假期" class="headerlink" title="17年最后一个假期"></a>17年最后一个假期</h1><p>国庆节过后的一个周末,一个人在家想着写点什么。最近很消沉,写点什么。我是一个从小沉默、自卑、内向的人。常常想为什么会这样。<br>就像李志的歌那样“我可是个男人啊,为什么打不起精神”<a href="http://music.163.com/song/26508207?userid=58553974" target="_blank" rel="external">黑色信封</a></p>
<h2 id="和自我对话"><a href="#和自我对话" class="headerlink" title="和自我对话"></a>和自我对话</h2><h3 id="晚上一个不知写什么"><a href="#晚上一个不知写什么" class="headerlink" title="晚上一个不知写什么"></a>晚上一个不知写什么</h3><p>现在的我,不知道干什么。不知道为什么会这样。 </p>
<h3 id="回忆一下过去"><a href="#回忆一下过去" class="headerlink" title="回忆一下过去"></a>回忆一下过去</h3><p>10年前我将上初三,那是上半学期。那时候每周会放半天假,让我们回去拿点换洗衣服。我小时候一直是在家附近的一所小学。那是我们村唯一的小学我在哪里度过了人生的七年时光,算上一年学前班。</p>
<p>然后从初中开始我就在镇上的中学读书了,由于学习离家比较远我开始了寄宿生活,家里爷爷奶奶在学校外面给我找了一个寄宿的地方,相当于私人开的托管地方有很多学生家长因为学习的寄宿环境差了所以选着外面的,唯一的好处是吃的比学校好点。不过后来因为触动了学校的利益在初二的时候我也搬去学校住宿了。现在会想起来那是我初次开始想家,每天期盼放假想着回家。我会感到很孤独很无助,那也是我第一次开始面对社会。</p>
<p>小时候学习一般算中等吧,也就是每天上学放学,那时候才刚刚开始知道网吧,偶尔也去,就是随便点点。然后回学校,那时候我们是初一初二会放双休,初三每周就只有半天假了。那时候总是很累,早上7点半开始早自习一直到晚上两节或者三节课的晚自习一直到10点左右下课。然后有半个小时的时间洗簌睡觉,然后等着第二天的起床铃声。</p>
<p>有过一些朋友,时间很快,白驹过隙。</p>
<p>我一直是一个普普通通的人,学习一般,平时内向。不喜欢出去玩,总是很胆怯,害怕在人多的地方。</p>
<p>工作也是,平平无奇,做人内向,不善言谈。</p>
<h3 id="总结一下自己"><a href="#总结一下自己" class="headerlink" title="总结一下自己"></a>总结一下自己</h3><p>从大学是的踌躇满志,到现在的无所适从。确实有很多需要反省的。</p>
<ol>
<li>什么都想做,对什么东西都是三分钟热度,什么都知道一点什么都没深入。</li>
<li>害怕别人的目光和对自己的看法。写点什么都不喜欢给认识的人看到,不能敞开心扉去生活去面对一切。</li>
<li>总是严重拖延,总是逃避,不想面对。</li>
<li>做一件事不能持续坚持下去,有时候明明想着要做什么,结果一会玩玩手机,一会看看新闻时间就过去了。</li>
<li>没有为一件事情疯狂过,</li>
</ol>
<p>我的一个朋友说人因为梦想而活着,然而现实更实际。</p>
<p>我好像忘记了自己,我需要去寻找内心那个真正的自己。</p>
<h3 id="多学习多反省"><a href="#多学习多反省" class="headerlink" title="多学习多反省"></a>多学习多反省</h3><p>我需要行动力,可是内心却总是懒惰的。也许需要经历些什么吧!</p>
]]></content>
<summary type="html">
<h1 id="17年最后一个假期"><a href="#17年最后一个假期" class="headerlink" title="17年最后一个假期"></a>17年最后一个假期</h1><p>国庆节过后的一个周末,一个人在家想着写点什么。最近很消沉,写点什么。我是一个从小沉默
</summary>
<category term="生活感想" scheme="http://yoursite.com/categories/%E7%94%9F%E6%B4%BB%E6%84%9F%E6%83%B3/"/>
<category term="个人感想" scheme="http://yoursite.com/tags/%E4%B8%AA%E4%BA%BA%E6%84%9F%E6%83%B3/"/>
</entry>
<entry>
<title>博客搭建笔记</title>
<link href="http://yoursite.com/2017/07/19/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA%E7%AC%94%E8%AE%B0/"/>
<id>http://yoursite.com/2017/07/19/博客搭建笔记/</id>
<published>2017-07-19T06:59:44.000Z</published>
<updated>2017-08-27T03:48:15.791Z</updated>
<content type="html"><![CDATA[<h2 id="0x1-起因-写作博客的经历"><a href="#0x1-起因-写作博客的经历" class="headerlink" title="0x1 起因 写作博客的经历"></a>0x1 起因 写作博客的经历</h2><p>三人行必有我师 搭建博客和更多的人交流学习提高自己!</p>
<p>我一直是一个不善言辞的人,第一次知道博客是在大学的时候,第一次上网是在初中07年左右。之前只是看别人写博客看别人的文章,我一直是一个信息的获取者,没有输出过什么。所以一直想搭建一个自己博客。但是现在才搭建好,因为拖延症比较厉害。</p>
<p>最开始写的第一篇博客是在csdn或者只能算是一个篇学习笔记。现在记录一下前期搭建这个博客的过程。方便想创建自己博客的同学参考一下,也是对自己做过的事情做一个笔记记录。</p>
<p>我经常会这样好多东西,要用的时候百度一下跟着做一步步把环境搭好,就是照着别人写的教程走然后不知道 为什么,这就导致无论什么时候当时是会做出来但是不够好。(做事情不够极致)之前也跟着网上的教程搭建过但是搭好之后就一直放在硬盘里面了,就一个hello world 文章。做事情虎头蛇尾 (需要有安排和计划)</p>
<h2 id="0x2-博客搭建的准备和需要用到的知识"><a href="#0x2-博客搭建的准备和需要用到的知识" class="headerlink" title="0x2 博客搭建的准备和需要用到的知识"></a>0x2 博客搭建的准备和需要用到的知识</h2><ul>
<li>基于github网站的page服务 (不懂可以百度一下)github是一个开源代码管理软件 </li>
<li>基于<a href="http://192.168.5.108:4001/2017/07/19/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA%E7%AC%94%E8%AE%B0/" target="_blank" rel="external">hexo</a> 开源博客框架使用node.js编写, 将支持的类型的文件转换成静态Web页面(html+css+JavaScript)。</li>
<li>git 命令知识 </li>
</ul>
<h2 id="0x3-开始创建之前的准备"><a href="#0x3-开始创建之前的准备" class="headerlink" title="0x3 开始创建之前的准备"></a>0x3 开始创建之前的准备</h2><p>我是在我的windows7 64 位笔记本上面搭建的,当然你也可以在 Macos 或者Linux(ubuntu或者其他)<br>系统上进行搭建。</p>
<h3 id="1工具的安装"><a href="#1工具的安装" class="headerlink" title="1工具的安装"></a>1工具的安装</h3><ul>
<li>1安装git工具 这里我使用的是<a href="https://git-scm.com/" target="_blank" rel="external">Git</a> 工具(qq电脑管家就可以下载了速度快)</li>
<li>2 下载并安装 <a href="https://nodejs.org/en/" target="_blank" rel="external">Node.js</a></li>
<li>3 (可选)如果需要对博客进行源代码管理,可以安装sourceTree或者gitExtensions 可视化git管理工具方便直接通过界面管理代码</li>
<li>3安装hexo 在git bash命令行中使用命令进行安装</li>
</ul>
<p>1.配置淘宝源地址 下载速度快点</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">npm config set registry https://registry.npm.taobao.org</div></pre></td></tr></table></figure>
<p>2.安装npm 命令工具</p>
<p><code>npm install -g cnpm --registry=https://registry.npm.taobao.org</code></p>
<p>3.安装hexo程序</p>
<p>前面的 node.js和npm命令安装好没有问题之后就可以安装hexo了</p>
<p><code>Npm install –g hexo #安装hexo命令</code></p>
<p>4.安装hexo 必备插件</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">npm install hexo-generator-index --save <span class="comment">#索引生成器 </span></div><div class="line">npm install hexo-generator-archive --save <span class="comment">#归档生成器 </span></div><div class="line">npm install hexo-generator-category --save \<span class="comment">#分类生成器 </span></div><div class="line">npm install hexo-generator-tag --save \<span class="comment">#标签生成器 </span></div><div class="line">npm install hexo-server --save \<span class="comment">#本地服务 </span></div><div class="line">npm install hexo-deployer-git --save \<span class="comment">#hexo通过git发布(必装) </span></div><div class="line">npm install hexo-renderer-marked@0.2.7 \--save \<span class="comment">#渲染器 </span></div><div class="line">npm install hexo-renderer-stylus@0.3.0 \--save \<span class="comment">#渲染器</span></div></pre></td></tr></table></figure>
<h3 id="2博客的初始化"><a href="#2博客的初始化" class="headerlink" title="2博客的初始化"></a>2博客的初始化</h3><p>选择一个空白文件夹右键 git bash工具进行<br>Hexo init 命令</p>
<p>生成静态页面<br>Hexo processing 简写 hexo p</p>
<p>启动本地服务<br>Hexo server 简写 hexo s</p>
<p>启动成功之后查看没有问题之后就可以进行相应的配置,关联自己的github帐号生成pages 网站项目了,就可以使用网址行访问了</p>
<p>比如我的<a href="http://clarwan.coding.me/#" target="_blank" rel="external">博客</a></p>
<h3 id="3配置ssh公钥-用于推送本地博客文件"><a href="#3配置ssh公钥-用于推送本地博客文件" class="headerlink" title="3配置ssh公钥 用于推送本地博客文件"></a>3配置ssh公钥 用于推送本地博客文件</h3><p>远程代码是基于SSH的,所以需要SSH的相关配置。方法是现在本地生成SSH公钥,然后添加到Github上面。具体的操作如下:</p>
<p>1 查看之前的密钥文件<br><code>ls -al ~/.ssh</code><br>存在全部删除(上一次认证的密钥文件,如果帐号没有变化直接使用)</p>
<p>2 然后重新生成 邮箱地址填写你注册的GitHub帐号的邮箱地址</p>
<p><code>ssh-keygen -t rsa -C "your@163.com"</code></p>
<p>3 添加密钥<br><code>ssh-add ~/.ssh/id_rsa
如果出错了 执行命令清除
eval</code>ssh-agent -s<code>ssh-add</code></p>
<p>4 复制密钥<br><code>clip < ~/.ssh/id_rsa.pub</code><br>把密钥内容复制到粘贴板中 或者可以打开文件id_rsa.pub(文本编辑器打开复制内容)<br>id_rsa.pub文件在User\当前登录用户.ssh 目录下面</p>
<p>5 把SSH密钥添加到Github上<br>登陆Github后找的page库视图页面,点击settings,然后进入SSH keys,把id_rsa.pub文件里内容添加进去就好了。</p>
<p>coding 也是同样的步骤 只不过把邮箱换成注册coding的邮箱就可以了</p>
<h3 id="4配置GitHub-Repositories"><a href="#4配置GitHub-Repositories" class="headerlink" title="4配置GitHub Repositories"></a>4配置GitHub Repositories</h3><p>1 登录GitHub网站,创建一个Repositories 按照默认设置来就行了<br>2 仓库名称需要注意 仓库名必须为<font color="red">【your_user_name.github.io】</font></p>
<p>3 编辑配置文件,文件位于根目录下_config.yml<br>在最后一行找到 deploy 节点或者全局搜索,没有就新增一个</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">deploy: </div><div class="line"> type: git #有的版本是github也是个小坑,注意 </div><div class="line"> repo: https://github.com/xxx/xxx.github.com.git #我的github是xufeng911 换成你本人的 </div><div class="line"> branch: master</div></pre></td></tr></table></figure>
<p>注意yml格式文件冒号后面必须加一个空格</p>
<p>4 部署远程博客,输入以下命令</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">shexo g</div><div class="line">hexo d </div><div class="line">#或者使用 hexo d -g 两条命令合在一起执行</div><div class="line">INFO Deploy done: git #出现下面的提示表示部署成功</div></pre></td></tr></table></figure>
<p>执行完毕后访问 your_user_name.github.io<br>即可看到部署在github上的默认博客,第一次发布可能会有10分钟的延迟。</p>
<h3 id="5配置coding网站,"><a href="#5配置coding网站," class="headerlink" title="5配置coding网站,"></a>5配置coding网站,</h3><p>和GitHub相同需要先创建一个库然后推送<br>修改deploy节点</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">deploy:</div><div class="line"> type: git</div><div class="line"> repository:</div><div class="line"> github: https://github.com/xxxx/xxxxx.github.io.git,master</div><div class="line"> coding: https://git.coding.net/xxxx/xxx.git,master</div></pre></td></tr></table></figure>
<p>将xxx替换为你自己的用户名即可</p>
<h3 id="Tips-需要注意的细节和事项"><a href="#Tips-需要注意的细节和事项" class="headerlink" title="Tips 需要注意的细节和事项"></a>Tips 需要注意的细节和事项</h3><ol>
<li>注意一定要验证Github的验证邮件。</li>
<li>出现其他任何的问题,先删除博客目录下的db.json文件,然后清理再部署远程博客,操作时输入以下的命令<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">hexo clean</div><div class="line">hexo d -g</div></pre></td></tr></table></figure>
</li>
</ol>
<p>走到了这一步,你应该知道了你的博客仅仅相当于一个毛坯房而已,意味着后面需要你自己一点点去装修,换成你喜欢的风格样式。至于具体如何装修你的博客,我们下一篇再说。</p>
<p>3 修改主题<br>先复制需要的主体到目录的themes文件夹<br>然后修改配置文件 _configy.yum<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">Extensions</div><div class="line"> Theme : pacman</div><div class="line">stylus:</div><div class="line"> compress: true</div></pre></td></tr></table></figure></p>
<p>修改你的博客根目录下的_config.yml配置文件中的theme属性,将其设置为jacman。同时建议设置stylus属性中的compress值为true,会自动压缩 CSS文件,hexo默认配置中不包含这一项,建议开启。 </p>
<p>具体配置方法在下一篇 hexo 主题配置笔记中发表</p>
<h3 id="参考文章"><a href="#参考文章" class="headerlink" title="参考文章"></a>参考文章</h3><p>1 域名绑定:<br>推荐参考文章:<a href="http://blog.csdn.net/qq_23435721/article/details/50876942" target="_blank" rel="external">http://blog.csdn.net/qq_23435721/article/details/50876942</a></p>
<p>2 以上搭建过程共参考以下文章:<br><a href="http://blog.csdn.net/u011148116/article/details/52274773" target="_blank" rel="external">http://blog.csdn.net/u011148116/article/details/52274773</a></p>
<p><a href="http://www.cnblogs.com/zhcncn/p/4097881.html" target="_blank" rel="external">http://www.cnblogs.com/zhcncn/p/4097881.html</a><br><a href="https://segmentfault.com/a/1190000000458953" target="_blank" rel="external">https://segmentfault.com/a/1190000000458953</a><br><a href="http://www.cnblogs.com/liulangmao/p/4323064.html" target="_blank" rel="external">http://www.cnblogs.com/liulangmao/p/4323064.html</a><br><a href="http://blog.csdn.net/qq_23435721/article/details/50876942" target="_blank" rel="external">http://blog.csdn.net/qq_23435721/article/details/50876942</a></p>
]]></content>
<summary type="html">
<h2 id="0x1-起因-写作博客的经历"><a href="#0x1-起因-写作博客的经历" class="headerlink" title="0x1 起因 写作博客的经历"></a>0x1 起因 写作博客的经历</h2><p>三人行必有我师 搭建博客和更多的人交流学习提
</summary>
<category term="hexo笔记" scheme="http://yoursite.com/categories/hexo%E7%AC%94%E8%AE%B0/"/>
<category term="hexo" scheme="http://yoursite.com/tags/hexo/"/>
<category term="笔记" scheme="http://yoursite.com/tags/%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title>hexo pacman 主题配置记录</title>
<link href="http://yoursite.com/2017/06/19/hexo-pacman%20%E4%B8%BB%E9%A2%98%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/"/>
<id>http://yoursite.com/2017/06/19/hexo-pacman 主题使用笔记/</id>
<published>2017-06-19T07:00:11.000Z</published>
<updated>2017-08-26T10:35:36.189Z</updated>
<content type="html"><![CDATA[<h1 id="hexo-pacman-笔记"><a href="#hexo-pacman-笔记" class="headerlink" title="hexo pacman 笔记"></a>hexo pacman 笔记</h1><p>之前的文章已经把hexo 博客的安装配搭建写了,现在是我在添加分类,添加文章以及使用技巧。<br><a href="http://a-limon.github.io/pacman/hello/introducing-pacman-theme/" target="_blank" rel="external">参考文档</a>这是GitHub上的一个配置文档,我搭建好之后发现有好多地方没有写清楚。果有帮助也算是一点小小的贡献。</p>
<h2 id="配置Tags-标签-和-Caegories-分类"><a href="#配置Tags-标签-和-Caegories-分类" class="headerlink" title="配置Tags(标签) 和 Caegories(分类)"></a>配置Tags(标签) 和 Caegories(分类)</h2><p>1 新建一个Tags页面 命令为<code>categories</code> </p>
<p><code>hexo new page categories</code></p>
<p>或者手动建立文件夹然后修改index.md文件。下面是参考文档中的指南但是很坑,文件内容需要修改好,这个问题我弄了大半天</p>
<ul>
<li>menu 默认没有启用 /tags 和 /categories 页面,如果需要启用请在博客目录下的source文件夹中分别建立tags 和 categories文件夹每个文件夹中分别包含一个index.md文件。内容为:</li>
</ul>
<p>下面我发出我内容截图</p>
<p><img src="http://ov527kbv3.bkt.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170823210736.png" alt=""><br>在根目录下的 source 文件夹<br><img src="http://ov527kbv3.bkt.clouddn.com/QQ%E6%88%AA%E5%9B%BE20170823215327.png" alt=""><br>可以看到有categories和tags两个目录</p>
<p>下面注意修改index.md中的内容</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">---</div><div class="line">title: Tagcloud </div><div class="line">date: 2017-08-09 17:00</div><div class="line">type: "tags"</div><div class="line">loyout: "tags"</div><div class="line">---</div></pre></td></tr></table></figure>
<p>注意需要加双引号<br>然后再修改另一个地方 scaffolds\post.md 文件,完全按照下面<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">---</div><div class="line">title: {{ title }}</div><div class="line">date: {{ date }}</div><div class="line">tags: {{ tags }}</div><div class="line">categories: {{ categories }}</div><div class="line"></div><div class="line">---</div></pre></td></tr></table></figure></p>
]]></content>
<summary type="html">
<h1 id="hexo-pacman-笔记"><a href="#hexo-pacman-笔记" class="headerlink" title="hexo pacman 笔记"></a>hexo pacman 笔记</h1><p>之前的文章已经把hexo 博客的安装配搭建写
</summary>
<category term="hexo笔记" scheme="http://yoursite.com/categories/hexo%E7%AC%94%E8%AE%B0/"/>
<category term="hexo" scheme="http://yoursite.com/tags/hexo/"/>
<category term="博客搭建" scheme="http://yoursite.com/tags/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"/>
</entry>
<entry>
<title>pymssql 访问mssql数据库</title>
<link href="http://yoursite.com/2017/06/07/python%E8%AE%BF%E9%97%AEmssql%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
<id>http://yoursite.com/2017/06/07/python访问mssql数据库/</id>
<published>2017-06-07T09:38:24.000Z</published>
<updated>2017-08-26T10:34:34.468Z</updated>
<content type="html"><![CDATA[<p>#pymssql 访问mssql数据库<br>python.org 网站关于python访问各种数据库的<a href="https://wiki.python.org/moin/DatabaseInterfaces" target="_blank" rel="external">介绍</a><br>这里介绍ADO方式访问 微软MSSQL数据库</p>
<h2 id="1-准备工作,基本工具的安装"><a href="#1-准备工作,基本工具的安装" class="headerlink" title="1 准备工作,基本工具的安装"></a>1 准备工作,基本工具的安装</h2><pre><code>(python安装,pip安装,pymssql第三方库安装)
</code></pre><h3 id="1-1-安装-python-2-7"><a href="#1-1-安装-python-2-7" class="headerlink" title="1.1 安装 python 2.7"></a>1.1 安装 python 2.7</h3><p>python2.7 <a href="https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi" target="_blank" rel="external">下载地址</a><br>!<a href="http://ov527kbv3.bkt.clouddn.com/python27Download.png" target="_blank" rel="external"></a><br>也可以访问 www.python.org 选择其他版本进行安装 ,装完之后配置一下环境变量<br>我的电脑-属性-高级系统设置-高级-环境变量.找到path变量然后把python安装目录添加上去。<br><img src="http://ov527kbv3.bkt.clouddn.com/win7PathSetFun123.png" alt=""></p>
<h3 id="1-2-配置pip"><a href="#1-2-配置pip" class="headerlink" title="1.2 配置pip"></a>1.2 配置pip</h3><p>将C:\Python27\Scripts 目录添加到系统环境变量<br>打开命令行输入 </p>
<p><code>pip install wheel</code></p>
<p>就安装好了wheel 工具可以安装 whl插件了</p>
<h3 id="1-3-安装-pymssql"><a href="#1-3-安装-pymssql" class="headerlink" title="1.3 安装 pymssql"></a>1.3 安装 pymssql</h3><p><a href="https://pypi.python.org/pypi/pymssql/2.1.3" target="_blank" rel="external">下载</a>安装pymssql第三方插件,因为我使用的是python2.7所以选择第一个cp27,win32第二个也下载了的没有安装成功<br><img src="http://ov527kbv3.bkt.clouddn.com/pymssql27-win32-download.png" alt=""></p>
<h2 id="开始使用python连接MSSQL数据库"><a href="#开始使用python连接MSSQL数据库" class="headerlink" title="开始使用python连接MSSQL数据库"></a>开始使用python连接MSSQL数据库</h2><p>官方网站 <a href="http://pymssql.org/en/stable/index.html" target="_blank" rel="external">http://pymssql.org/en/stable/index.html</a> 里面有详细的介绍和说明<br>下面是我从官方网站的<a href="http://pymssql.org/en/stable/pymssql_examples.html" target="_blank" rel="external">例子代码</a>修改的测试代码<br>示例代码<br><img src="http://ov527kbv3.bkt.clouddn.com/AccessDBTest.png" alt=""></p>
<p>这里讲解一个地方:MSSQL 有两种认证方式登录数据库这里可以分别进行设置</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line"><span class="comment">#使用帐号密码方式这里的本地库的测试用户</span></div><div class="line"><span class="keyword">from</span> os <span class="keyword">import</span> getenv</div><div class="line"><span class="keyword">import</span> pymssql</div><div class="line"></div><div class="line">server = <span class="string">"."</span></div><div class="line">user = <span class="string">"sa"</span></div><div class="line">password = <span class="string">"112233"</span></div><div class="line"></div><div class="line">conn = pymssql.connect(server, user, password, <span class="string">"Securities_DB"</span>,<span class="string">'utf8'</span>)</div><div class="line"><span class="comment">#conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')</span></div><div class="line"><span class="comment">#connect()方法 可以显示的指定参数名次,默认按顺序获取传入的参数值</span></div><div class="line"><span class="comment">#charset指定编码格式</span></div><div class="line">cursor = conn.cursor()</div></pre></td></tr></table></figure>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">#使用windows身份认证的方式</div><div class="line">conn = pymssql.connect(</div><div class="line"> host=r'dbhostname\myinstance',</div><div class="line"> user=r'companydomain\username',</div><div class="line"> password=PASSWORD,</div><div class="line"> database='DatabaseOfInterest'</div><div class="line">)</div></pre></td></tr></table></figure>
<p>执行结果<br>!<a href="http://ov527kbv3.bkt.clouddn.com/170825CreateTableInfo.png" target="_blank" rel="external"></a></p>
<h2 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h2><p>关于中文乱码</p>
<ul>
<li><p>文件头加上 #coding=utf8 (必须)</p>
</li>
<li><p>连接的时候加入charset设置信息<br> pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset=”utf8”)</p>
</li>
<li><p>sql语句中有中文的时候进行encode<br> insertSql = “insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,’测试’,’2012/2/1’)”.encode(“utf8”)</p>
</li>
</ul>
<p>##参考链接<br>python Wiki 介绍:<a href="https://wiki.python.org/moin/DatabaseInterfaces" target="_blank" rel="external">https://wiki.python.org/moin/DatabaseInterfaces</a><br>pymssql Wiki 介绍: <a href="http://pymssql.org/en/stable/index.html" target="_blank" rel="external">http://pymssql.org/en/stable/index.html</a><br>pip安装: <a href="http://blog.csdn.net/fhl812432059/article/details/51745226" target="_blank" rel="external">http://blog.csdn.net/fhl812432059/article/details/51745226</a><br>pymssql文档 <a href="http://pymssql.org/en/latest/pymssql_examples.html" target="_blank" rel="external">http://pymssql.org/en/latest/pymssql_examples.html</a></p>
<p>##二维码 欢迎打赏<br>微信<br><img src="http://ov527kbv3.bkt.clouddn.com/WchatPlayCodePhoto.png" alt=""> </p>
<p>支付宝<br><img src="http://ov527kbv3.bkt.clouddn.com/aliPayCodePhoto.png" alt=""></p>
]]></content>
<summary type="html">
<p>#pymssql 访问mssql数据库<br>python.org 网站关于python访问各种数据库的<a href="https://wiki.python.org/moin/DatabaseInterfaces" target="_blank" rel="extern
</summary>
<category term="python" scheme="http://yoursite.com/categories/python/"/>
<category term="python" scheme="http://yoursite.com/tags/python/"/>
<category term="pymssql" scheme="http://yoursite.com/tags/pymssql/"/>
</entry>
<entry>
<title>个人独立博客集合</title>
<link href="http://yoursite.com/2017/06/06/%E4%B8%AA%E4%BA%BA%E7%8B%AC%E7%AB%8B%E5%8D%9A%E5%AE%A2%E9%9B%86%E5%90%88/"/>
<id>http://yoursite.com/2017/06/06/个人独立博客集合/</id>
<published>2017-06-06T10:25:07.000Z</published>
<updated>2017-10-24T16:28:51.961Z</updated>
<content type="html"><![CDATA[<h2 id="程序员"><a href="#程序员" class="headerlink" title="程序员"></a>程序员</h2><p>酷壳: <a href="https://coolshell.cn" target="_blank" rel="external">https://coolshell.cn</a><br>周公: <a href="http://zhoufoxcn.blog.51cto.com" target="_blank" rel="external">http://zhoufoxcn.blog.51cto.com</a><br>赵颉: <a href="http://blog.zhaojie.me" target="_blank" rel="external">http://blog.zhaojie.me</a><br>刘未鹏: <a href="http://mindhacks.cn" target="_blank" rel="external">http://mindhacks.cn</a></p>
<h2 id="net"><a href="#net" class="headerlink" title=".net"></a>.net</h2><h2 id="csdn"><a href="#csdn" class="headerlink" title="csdn"></a>csdn</h2><h2 id="博客园"><a href="#博客园" class="headerlink" title="博客园"></a>博客园</h2><h2 id="个人博客"><a href="#个人博客" class="headerlink" title="个人博客"></a>个人博客</h2><p>读立写生: <a href="http://www.cnfeat.com" target="_blank" rel="external">http://www.cnfeat.com</a><br>日积月累: <a href="http://www.yanmin99.com" target="_blank" rel="external">http://www.yanmin99.com</a><br>pkwan: <a href="http://pkwans.com" target="_blank" rel="external">http://pkwans.com</a><br>moeka: <a href="https://moeka.me" target="_blank" rel="external">https://moeka.me</a><br>steven5538: <a href="http://blog.steven5538.tw" target="_blank" rel="external">http://blog.steven5538.tw</a><br>claudxiao: <a href="http://www.claudxiao.net/" target="_blank" rel="external">http://www.claudxiao.net/</a><br>月光博客: <a href="http://www.williamlong.info" target="_blank" rel="external">http://www.williamlong.info</a></p>
<h2 id="社区"><a href="#社区" class="headerlink" title="社区"></a>社区</h2><p>stackoverflow <a href="http://stackoverflow.com/" target="_blank" rel="external">http://stackoverflow.com/</a></p>
<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>书蠹机虫的博客 <a href="http://blog.sina.com.cn/minzusheying" target="_blank" rel="external">http://blog.sina.com.cn/minzusheying</a><br>老码农 <a href="http://blog.sina.com.cn/u/2154015873" target="_blank" rel="external">http://blog.sina.com.cn/u/2154015873</a><br>1980303827 <a href="http://blog.sina.com.cn/u/1980303827" target="_blank" rel="external">http://blog.sina.com.cn/u/1980303827</a></p>
]]></content>
<summary type="html">
<h2 id="程序员"><a href="#程序员" class="headerlink" title="程序员"></a>程序员</h2><p>酷壳: <a href="https://coolshell.cn" target="_blank" rel="external">
</summary>
<category term="收集整理" scheme="http://yoursite.com/categories/%E6%94%B6%E9%9B%86%E6%95%B4%E7%90%86/"/>
<category term="独立博客集合" scheme="http://yoursite.com/tags/%E7%8B%AC%E7%AB%8B%E5%8D%9A%E5%AE%A2%E9%9B%86%E5%90%88/"/>
</entry>
<entry>
<title>Hello World</title>
<link href="http://yoursite.com/2016/06/07/hello-world/"/>
<id>http://yoursite.com/2016/06/07/hello-world/</id>
<published>2016-06-07T07:38:24.000Z</published>
<updated>2017-08-19T11:02:59.673Z</updated>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="external">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="external">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="external">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ hexo new <span class="string">"My New Post"</span></div></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="external">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ hexo server</div></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="external">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ hexo generate</div></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="external">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">$ hexo deploy</div></pre></td></tr></table></figure>
<p>More info: <a href="https://hexo.io/docs/deployment.html" target="_blank" rel="external">Deployment</a></p>
]]></content>
<summary type="html">
<p>Welcome to <a href="https://hexo.io/" target="_blank" rel="external">Hexo</a>! This is your very first post. Check <a href="https://hexo.
</summary>
</entry>
</feed>