194
C 程式語言 Department of Computer Science and Information Engineering Chaoyang University of Technology Taichung, Taiwan, Republic of China Instructor: De-Yu Wang (ᨻ䀺) E-mail: [email protected] Homepage: http://dywang.csie.cyut.edu.tw Phone: (04)23323000 ext 4538 Office: E738 q r s t January 2, 2020

C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

C程式語言

Department of Computer Science and Information EngineeringChaoyang University of TechnologyTaichung, Taiwan, Republic of China

Instructor: De-Yu Wang ( )E-mail: [email protected]

Homepage: http://dywang.csie.cyut.edu.twPhone: (04)23323000 ext 4538

Office: E738

p q r s t u v w x y z { | } ~ ~January 2, 2020

Page 2: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

• Instructor: De-Yu Wang

1. Email: [email protected]

2. Homepage: http://dywang.csie.cyut.edu.tw

3. pdf

4. Phone: (04)23323000 ext 4538

5. Office: E738

1. C 語言 /

2. Linux

3. C Programming Tutorial

4. Debugging with GDB

5. Linux Strip Command Examples (Reduce Executable/Binary File Size)

De-Yu Wang CSIE CYUT i

Page 3: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Contents

1 61.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3 NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 C語言 142.1 C 語言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 程式語言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3 程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 vi 183.1 vi vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2 vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.3 vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.4 vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4 gcc 244.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.3 gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5 305.1 程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305.2 語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325.4 程式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1

Page 4: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

CONTENTS CONTENTS

6 366.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366.2 sizeof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.5 char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

7 437.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8 式 478.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478.2 printf 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478.3 printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488.4 scanf 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498.5 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498.6 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518.7 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528.8 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538.9 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548.10 scanf . . . . . . . . . . . . . . . . . . . . . . . . . . 558.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

9 589.1 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629.6 Bitwise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

10 6810.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6810.2 if statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6810.3 if...else statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7010.4 nested if statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7110.5 if...else if...else Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 7310.6 ?: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7410.7 switch statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7610.8 goto statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

De-Yu Wang CSIE CYUT 2

Page 5: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

CONTENTS CONTENTS

10.9 nested switch statements . . . . . . . . . . . . . . . . . . . . . . . . . . 7910.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

11 8111.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8111.2 for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8111.3 while loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8311.4 do...while loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8411.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8511.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8611.7 break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8811.8 continus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8911.9 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8911.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

12 main 式 9312.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9312.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9312.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9412.4 errno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9512.5 STDOUT STDERR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9712.6 式 perror . . . . . . . . . . . . . . . . . . . . . . . . . . . 9912.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

13 式 10313.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10313.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10313.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10413.4 call by value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10513.5 call by reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10613.6 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10713.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10813.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11013.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

14 11314.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11314.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11414.3 - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11614.4 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11714.5 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11814.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

15 12215.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12215.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12315.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12415.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12515.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

De-Yu Wang CSIE CYUT 3

Page 6: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

CONTENTS CONTENTS

15.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12715.7 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12815.8 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12915.9 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13015.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

16 13416.1 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13416.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13416.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13516.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

17 13717.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13717.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13717.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13817.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13917.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14017.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14117.7 fseek 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14217.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

18 14518.1 言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14518.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14518.3 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14718.4 式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14818.5 Bit Fileds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15018.6 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15118.7 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15218.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

19 C 15619.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15619.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15719.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15719.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15919.5 .h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16019.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

20 gdb 16420.1 gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16420.2 gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16420.3 Python gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16620.4 gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16720.5 gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

De-Yu Wang CSIE CYUT 4

Page 7: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

CONTENTS CONTENTS

21 Strip程式 17221.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17221.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17321.3 strip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

22 QtEmbedded porting 18622.1 arm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18622.2 Qt embedded . . . . . . . . . . . . . . . . . . . . . . . . . . . 18822.3 Qt embedded 程式 . . . . . . . . . . . . . . . . . . . . . . . 19022.4 target board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

De-Yu Wang CSIE CYUT 5

Page 8: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 1

1.1

1.

2. Linux式

3.

4.

5.

6. LDAP YUM repositoryNFS NTP ISCSI DNS

FTP

1.2

1. Linux

(a) Linux

(b) Linux

(c)

2. Linux

(a) E517

6

Page 9: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.3. NAT CHAPTER 1.

(b)

(c) LiveCD LiveCD

1.3 NAT

1. NAT

2. Linux Windows Honda式

3.

4. 式

(a)

(b)

(c)

(d)

(e)

(f)

5.

1.4

1. GUI 程式 程式

(a) Rebuild KVM KVM 10

De-Yu Wang CSIE CYUT 7

Page 10: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.4. CHAPTER 1.

(b) Revert KVM KVM程

(c) Reboot KVM KVM

(d) KVM Console KVM

2. KVM KVM111111 kvm8 Revert KVM

3. virt-view�1 [dywang@dywH ~]$ sudo virt-viewer kvmusb

No protocol specified3 Cannot open display:

Run 'virt-viewer --help' to see a full list of available command lineoptions� �

4. Xwindow $XAUTHORITY�[dywang@dywH ~]$ echo $XAUTHORITY� �

5. XAUTHORITY XAUTHORITY=~/.Xauthoritysudo

De-Yu Wang CSIE CYUT 8

Page 11: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.5. CHAPTER 1.

�[dywang@dywH ~]$ XAUTHORITY=~/.Xauthority sudo virt-viewer kvmusb� �

1.5

1. 程式

�1 [root@dywH ~]# e517sshpass.sh

myip=1043 hosts=103,105

q(quit) iscsi halt reboot c(clear) l(lvm) rhcsa rhce5 > t(mounttest) k(kvmreboot) v(kvmrevert) s(servicerestart)

> vi1 c1 lpvar c999 sh999 hp(hostpatch)? c9997 keyin remote host root password:� �

2.

(a) q(quit)

(b) iscsi ISCSI

(c) halt

(d) reboot

(e) c(clear)

(f) l(lvm) 式

(g) rhcsa RHCSA

(h) rhce RHCE

(i) t(mounttest)

(j) k(kvmreboot) KVM

(k) v(kvmrevert) KVM

(l) s(servicerestart)

(m) vi1 vi

(n) c1 C 語言 程式

(o) lpvar shell

(p) c999 C 語言程式

(q) sh999 Shell script 程式

(r) hp(hostpatch)

De-Yu Wang CSIE CYUT 9

Page 12: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.6. CHAPTER 1.

1.6

1. E517 ?-? 1-1

2. ( )IP 192.168.1.140 IP 140�

1 [dywang@deyu ~]$ ifconfig | grep 192inet addr:192.168.1.140 Bcast:192.168.1.255 Mask

:255.255.255.03 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask

:255.255.255.0� �3. deyu.wang dywang sid

式 IP1-11 IP 199 123456�

1 [dywang@deyu ~]$ echo '1-11 199 123456 ' > sid[dywang@deyu ~]$ cat sid

3 1-11 199 123456� �

1.7

1. ( )[dywang@deyu ~]$ ifconfig

IP

(a) Server deyu.wang server.deyu.wang

(b) Server deyu.wang 192.168.122.0/24

(c) Server IP 192.168.122.1 IP 192.168.122.X X

2.

(a) kvmX.deyu.wang IP 192.168.122.X X5 7

(b) root 123qwe

(c) RHCE my111.wang 192.168.111.0/24server IP 192.168.111.1

(d) �1 IP Address: 192.168.122.X

Netmask: 255.255.255.03 Gateway: 192.168.122.1

De-Yu Wang CSIE CYUT 10

Page 13: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.8. CHAPTER 1.

Name server: 192.168.122.1� �(e) RHCSA/RHCE 6,7 repositority http://dywang.csie.cyut.edu.tw/

centos7.

(f) RHCSA 8 repositority

i. BaseOS repo server: http://dywang.csie.cyut.edu.tw/centos8/BaseOS.ii. AppStream repo server: http://dywang.csie.cyut.edu.tw/centos8/App-

Stream.

(g) kernel packages: RPM http://dywang.csie.cyut.edu.tw/ker-nel/centos7.

(h) LDAP server

i. deyu.wangii. base DN dc=deyu,dc=wangiii. ftp://deyu.wang/pub/cacert.pem.

1.8

1. ()

2. server

1.8.1 DNS server

(a) DNS sshserver host IP

(b) DNS server�[dywang@deyu ~]$ host kvm7.deyu.wang

2 ;; connection timed out; trying next origin;; connection timed out; no servers could be reached� �

(c) DNS server kvm7.deyu.wang IP�1 [dywang@deyu ~]$ host kvm7.deyu.wang

Host kvm7.deyu.wang not found: 3(NXDOMAIN)� �(d) deyu.wang root

De-Yu Wang CSIE CYUT 11

Page 14: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.8. CHAPTER 1.

�[dywang@deyu ~]$ su -

2 Password: 123123[root@deyu ~]#� �

(e) setdnsmasq.sh dnsmasq DNS�1 [root@deyu ~]# setdnsmasq.sh restart� �

(f) host kvm7.deyu.wang IP 192.168.122.7�1 [root@deyu ~]# host kvm7.deyu.wang

kvm7.deyu.wang has address 192.168.122.73 kvm7.deyu.wang mail is handled by 1 20.� �

(g) setdnsmasq.sh dnsmasq DNSsetdns.sh named DNS�

1 [root@deyu ~]# setdns.sh restart� �

1.8.2 LDAP server

(a) LDAP ldapuser1deyu.wang ( ) root�

1 [dywang@deyu ~]$ su -Password: 123123

3 [root@deyu ~]#� �(b) setldap1.sh restart LDAP

�1 [root@deyu ~]# setldap1.sh restart� �

1.8.3 NFS server

(a) server server NFSLDAP NFS

server deyu.wang root

De-Yu Wang CSIE CYUT 12

Page 15: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

1.8. CHAPTER 1.

�1 [dywang@deyu ~]$ su -

Password: 1231233 [root@deyu ~]#� �

(b) setnfs.sh�1 [root@deyu ~]# setnfs.sh restart� �

De-Yu Wang CSIE CYUT 13

Page 16: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 2

C語言

2.1 C語言

1. C語言 Dennis Ritchie (1941-2011) 70

2. 1967 Ritchie

3. C 語言 C++ 語言 Unix

4. (Ken Thompson) DEC PDP-7語言

5. 語言 B 語言

6. 1971 B 語言 C 語言 B 語言

7. 1964Multics (MULTiplexed Information and

Computing System)

8. 1969 MULTICS

9. 1973 DEC PDP-7 multicsUnix

10. Unix C 語言 程式 Linux

11. C 語言 Unix

14

Page 17: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

2.2. 程式語言 CHAPTER 2. C 語言

12. Ritchie Thompson C 語言 程式 語言

13. C 語言 Yahoo Google C 語言程式 程式語言

14. C語言 Linux BSD Mac OS

2.2 程式語言

2.2.11.

(a) 程式

(b) 程式 程式

(c) 程式 basic, shell script, perl, python ...

2.

(a) 程式

(b) 程式 程式 語

(c) 程式 c, c++, pascal, cobol, fortran, java ...

De-Yu Wang CSIE CYUT 15

Page 18: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

2.3. 程式 CHAPTER 2. C 語言

2.2.21. 語言

(a)

(b)

(c)

(d) 語言 語言

2. 語言

(a) 語言 語

(b)

(c)

(d) basic, shell script, python, pascal, cobol 語言

3. c 語言 語言 語言 python, java, perl 程式語言c 式 c 語言

2.3 程式

1. 程式 程式

(a) 程..Start/End.

Decision

.

Process

.

Intput/Output

(b) 程

De-Yu Wang CSIE CYUT 16

Page 19: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

2.3. 程式 CHAPTER 2. C 語言

..Start.

file?

.

ReadParameters

.

Date

.

Legal?

.

Waring

.

getWeek

.

makePaper

.

makePaper

.

wknu > 18 ?

.

Stop

.

yes

.

No

.

all or All

.

yes

.

yes

.

other

.

no

2. 程式

(a) 程

(b)

3.

4. 程式

5.

6. 程式

De-Yu Wang CSIE CYUT 17

Page 20: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 3

vi

3.1 vi vim

1. Linux Linux

2. Linux Unix ASCII

3. vi vim vi

4. vim

5. vim vim 程式

6. VIM

3.2 vi

1. vi 式 式 式 式

式-

-

:, /, ?

[Esc]

i,o,a,rI,O,A,R

2.

(a) vi 式

�1 [dywang@dywOffice tmp]$ vim test.txt� �

(b) i 式

18

Page 21: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

3.2. VI CHAPTER 3. VI

(c) [Esc] 式

(d) 式 :wq vi

3.

式hjkl[Ctrl]+f[Ctrl]+b[Ctrl]+d[Ctrl]+u+-n<space> n

20<space> 20

0 0$HMLGnG n 20G

20 ( :set nu)n<Enter> n

式/word word?word wordnN:n1,n2s/word1/word2/g n1 n2 word1

word2:1,$s/word1/word2/g word1

word2:1,$s/word1/word2/gc word1

word2

式x, X x Xnx nddndd n 20dd 20d1GdGdw (delete word)yynyy n 20yy 20y1G

De-Yu Wang CSIE CYUT 19

Page 22: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

3.3. VIM CHAPTER 3. VI

yGp, P p P

Ju[Ctrl]+r.

式i, I i(I) (

)a, A a(A) ( )

o, O o(O) ( )

r, R r RESC

Esc 式 式式

:w:w!:q vi:q! !

:wq :wq!:x wq:e!ZZ

:w [filename]:r [filename]

filename:set nu:set nonu set nu:n1,n2 w [filename] n1 n2 filename:! command vi 式 command

[ :! ls /home ]

4. vi

(a) / home/ csie/ vitest.txt / home/csie/.vitest.txt.swp

(b) vi

(c) vi 程式

3.3 vim

1. vi vi vim

De-Yu Wang CSIE CYUT 20

Page 23: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

3.3. VIM CHAPTER 3. VI

�1 [dywang@dywOffice tmp]$ ll /bin/vi*

lrwxrwxrwx 1 root root 20 Oct 17 13:11 /bin/vi -> /etc/alternatives/vi*3 lrwxrwxrwx 1 root root 21 Oct 17 13:11 /bin/vim -> /etc/alternatives/

vim*[dywang@dywOffice tmp]$ ll /etc/alternatives/vi*

5 lrwxrwxrwx 1 root root 21 Oct 17 13:11 /etc/alternatives/vi ->/usr/bin/vim-enhanced*

7 lrwxrwxrwx 1 root root 21 Oct 17 13:11 /etc/alternatives/vim ->/usr/bin/vim-enhanced*� �

2. vim 程式語

3. vim /etc/man.config

�"/etc/man.config" [readonly] 150L, 4900C 1,1

Top� �(a) /etc/man.config

(b)

(c) 150 4900

(d) ,

(e)

4.

vV[Ctrl]+v 式yd

5.

(a) vi :r filename filename

(b) vim vim filename1 file-name2 filename3

:n:N:files

6.

(a) 式 :sp filename

De-Yu Wang CSIE CYUT 21

Page 24: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

3.4. VI CHAPTER 3. VI

(b) filename

:sp:sp filename filename[Ctrl]+wj [Ctrl]

wj

[Ctrl]+wk[Ctrl]+wq [Ctrl]+w

:q

7. vim

(a) ~/.viminfo

(b) vim /etc/vimrc

(c) vim ~/.vimrcvim

:set nu:set nonu:set hlsearch:set autoindent:set noautoindent:set backup filename~:set rule:set showmode --insert--:set backspace=(012) 2 backspace

0 1:set all:syntax (off|on) 程式 語

3.4 vi

3.4.11. zzz

2. zzz

3. viex1.txt vi1.txt

4. vi vim vi1.txt

(a) 10

(b) 3

(c) 20

(d) 式 " " 式

De-Yu Wang CSIE CYUT 22

Page 25: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

3.4. VI CHAPTER 3. VI

(e) 'ABCDEabcde'

(f) '1234567890'

(g) "MANPATH" "manpath"

(h)

3.4.21. zzz

2. zzz

3. viex2.txt vi2.txt

4. vi vim vi2.txt

(a) 5

(b) 3

(c) 30

(d) 式 " " 式

(e) 'ABCDEabcde'

(f) '1234567890'

(g) 30 "MANPATH" "manpath"

(h)

3.4.31. zzz

2. zzz

3. viex3.txt vi3.txt

4. vi vim vi3.txt

(a) 35

(b)

(c) 20

(d)

(e) 13 'ABCDEabcde'

(f) '1234567890'

(g) 30 55 "man" "MAN"

(h)

De-Yu Wang CSIE CYUT 23

Page 26: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 4

gcc

4.1

1. Linux (binary file) /usr/bin/passwd, /bin/touch, /bin/bash file /bin/bash

(ELF 64-bit LSB executable) 式 (uses sharedlibs) (ELF: Extensible Linking Format, LSB: Linux Standard Base)�1 [dywang@dywIssd zzz]$ file /bin/bash

/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),3 dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped� �

2. Shell scripts shell ( bash) 程式 式binary file /etc/init.d/autofs

shell script�1 [dywang@dywIssd zzz]$ file /etc/init.d/autofs

/etc/init.d/autofs: Bourne-Again shell script text executable� �3. (text file) binary

file gcc C 語 程式binary file

4. C/C++ 程式, C/C++ ( gcc/g++) (sourcecode) 程式

4.2

1. C/C++ (source code)

2. gcc/g++ C/C++ (object file)語言

24

Page 27: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

4.3. GCC CHAPTER 4. GCC

3. 式 程式 式 C/C++function 程式

4.

5. gcc/g++ 程 程 *.o 式(Object file)

� +

程式

gcc/g++

(Object file)

?

?

?

?

?

6. 程式 程式 程 式程式 式 ( Link ) 程式

式 程

程式

程式 程 式�-

?

?

4.3 gcc

1. vi 程式 hello.c�[dywang@dyw219 zzz]$ vi hello.c

2 #include <stdio.h>

De-Yu Wang CSIE CYUT 25

Page 28: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

4.3. GCC CHAPTER 4. GCC

main()4 {

printf("Hello!\n");6 }� �

2. �[dywang@dyw219 zzz]# gcc -c hello.c� �

3. hello.o binary�1 [dywang@dyw219 zzz]$ ll hello.*

-rw-rw-r--. 1 dywang dywang 58 Apr 26 15:20 hello.c3 -rw-rw-r--. 1 dywang dywang 1488 Apr 26 15:20 hello.o� �

4.hello.o�1 [dywang@dyw219 zzz]# gcc -O hello.c -c� �

5. -o binary file�1 [dywang@dyw219 zzz]# gcc -o hello hello.c

[dywang@dyw219 zzz]$ ll hello*3 -rwxrwxr-x. 1 dywang dywang 6663 Apr 26 15:22 hello

-rw-rw-r--. 1 dywang dywang 58 Apr 26 15:20 hello.c5 -rw-rw-r--. 1 dywang dywang 1488 Apr 26 15:20 hello.o� �

6. -Wall 程式-Wall -O (FLAGS) CCFLAGS�

1 [dywang@dyw219 zzz]# gcc -o hello hello.c -Wallhello.c:2:1: warning: return type defaults to int [-Wreturn-type]

3 main()^

5 hello.c: In function main:hello.c:5:1: warning: control reaches end of non-void function [-Wreturn

-type]7 }

^� �

De-Yu Wang CSIE CYUT 26

Page 29: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

4.4. CHAPTER 4. GCC

7. binary file 式

(a) -lm 式 libm.so libm.a

(b) -L 式

(c) -I include

�[dywang@dyw219 zzz]$ gcc -o hello1 hello.c -lm -L/usr/lib -I/usr/include� �

8. hello1 hello libm.so.6 式�1 [dywang@dyw219 zzz]$ ldd hello

linux-vdso.so.1 => (0x00007fff308dd000)3 libc.so.6 => /lib64/libc.so.6 (0x000000394aa00000)

/lib64/ld-linux-x86-64.so.2 (0x0000560fe1b54000)5 [dywang@dyw219 zzz]$ ldd hello1

linux-vdso.so.1 => (0x00007ffce89bb000)7 libm.so.6 => /lib64/libm.so.6 (0x000000394ae00000)

libc.so.6 => /lib64/libc.so.6 (0x000000394aa00000)9 /lib64/ld-linux-x86-64.so.2 (0x000055a2b0e7f000)� �

4.4

1. a.h b.h c.h C main.c 2.c 3.c

(a) �1 [dywang@dyw219 zzz]$ wget http://dywang.csie.cyut.edu.tw/dywang/

download/make1.tar.gz� �(b) make1.tar.gz�

1 [dywang@dyw219 zzz]$ tar zxvf make1.tar.gzmake1/

3 make1/main.cmake1/b.h

5 make1/c.hmake1/2.c

7 make1/3.cmake1/a.h� �

2. 程式

(a) make1

De-Yu Wang CSIE CYUT 27

Page 30: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

4.5. CHAPTER 4. GCC

�[dywang@dyw219 zzz]$ cd make1

2 [dywang@dyw219 make1]$� �(b) .c .o�

[dywang@dyw219 make1]$ gcc -c main.c2 [dywang@dyw219 make1]$ gcc -c 2.c

[dywang@dyw219 make1]$ gcc -c 3.c� �(c) .o�

1 [dywang@dyw219 make1]$ gcc -o main main.o 2.o 3.o� �(d) 程式 main�

1 [dywang@dyw219 make1]$ ./main2222[dywang@dyw219 make1]$� �

4.5

1. main.c 2.c 3.c 程式 include 程式 c.hmain.c 2.c 3.c b.h 程式

2.c 程式�[dywang@dyw219 make1]$ grep ^# main.c

2 #include <stdlib.h>#include "a.h"

4 [dywang@dyw219 make1]$ grep ^# 2.c#include <stdio.h>

6 #include "a.h"#include "b.h"

8 [dywang@dyw219 make1]$ grep ^# 3.c#include "b.h"

10 #include "c.h"� �2. 2.c 2222�

[dywang@dyw219 make1]$ vim 2.c2 [dywang@dyw219 make1]$ grep 2222 2.c

printf("2222\n");� �De-Yu Wang CSIE CYUT 28

Page 31: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

4.6. CHAPTER 4. GCC

3. main 2.o main�1 [dywang@dyw219 make1]$ gcc -c 2.c

[dywang@dyw219 make1]$ gcc -o main main.o 2.o 3.o� �4. main 2222�

[dywang@dyw219 make1]$ ./main2 2222� �

4.6

1.

(a) zzz

(b) zzz

2. C 語言程式 gcc1.c

(a) IP

(b) gcc1.c gcc1.o

(c) gcc1.b1

(d) 式 libm.so gcc1.b2

3. make1.tar.gz

(a) make1.tar.gz

(b) make1

(c) 程式 程式 IP

(d) .c .o

(e) .o main.b1

De-Yu Wang CSIE CYUT 29

Page 32: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 5

5.1 程式

1. 程式

(a) (Preprocessor Commands)

(b) 式 (Functions)

(c) (Variables)

(d) 式 (Statements & Expressions)

(e) (Comments)

2. C 語言程式�#include <stdio.h>

2int main()

4 {/* my first program in C */

6 printf("Hello, World! \n");

8 return 0;}� �

3. C stdio.h <....h>

�1 #include <stdio.h>� �

4. 式 main C 程式 式 式{ ...}

30

Page 33: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

5.2. 語 CHAPTER 5.

�1 int main()� �

5. �1 printf("Hello, World! \n");

return 0;� �6. �

/* my first program in C */� �

5.2 語

1. C 程式 tokens tokens (keyword) (identifier)(constant) (string literal) (symbol)

2. �1 printf("Hello, World! \n");� �

3. Hello, World 程式 tokens�1 printf

(3 "Hello, World! \n"

)5 ;� �

4. ';'�1 printf("Hello, World! \n");� �

5. 程式

(a) A-Z a-z _(b) A-Z a-z _ 0-9

(c)@, $, %, ^ +, - , &, * ...

De-Yu Wang CSIE CYUT 31

Page 34: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

5.3. CHAPTER 5.

(d) C 語言 Linux Var var

6. C 語言�1 auto break case char

const continue default do3 double else enum extern

float for goto if5 int long register return

short signed sizeof static7 struct switch typedef union

unsigned void volatile while� �7. �

int a, b;2 a = b + 3;� �

5.3

1. (debug) 程式

2. 語 程式 語 C 語言 hello.c�[dywang@dyw219 zzz]$ vim hello.c

2 [dywang@dyw219 zzz]$ cat hello.c#include <stdio.h>

4 main() {printf("Hello!\n");

6 )� �3. gcc hello.c 4 ) (�

[dywang@dyw219 zzz]$ gcc hello.c2 hello.c: In function main:

hello.c:4:1: error: expected statement before ) token4 )

^6 hello.c:4:1: error: expected declaration or statement at end of input� �

4.

De-Yu Wang CSIE CYUT 32

Page 35: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

5.4. 程式 CHAPTER 5.

�[dywang@dyw219 zzz]$ vim hello.c

2 [dywang@dyw219 zzz]$ cat hello.c#include <stdio.h>

4 main() {printf("Hello!\n");

6 }� �5. �

[dywang@dyw219 zzz]$ gcc hello.c2 [dywang@dyw219 zzz]$� �

6. 語 程式語 debug1.c程式�[dywang@dyw219 zzz]$ vim debug1.c

2 [dywang@dyw219 zzz]$ cat debug1.c#include <stdio.h>

4 main() {int a=1, b=2, c;

6 c = a-b;printf("1 + 2 = %d\n", c);

8 }� �7. gcc debug1.c debug1�

[dywang@dyw219 zzz]$ gcc -o debug1 debug1.c� �8. debug1 1 + 2 = -1 語

程式 程式�1 [dywang@dyw219 zzz]$ ./debug1

1 + 2 = -1� �

5.4 程式

1. 程式 TAB 程式 程式

2. 程式 hello.c hello1.c程式 hello.c printf 式main 程式 程式 程式

De-Yu Wang CSIE CYUT 33

Page 36: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

5.5. CHAPTER 5.

�[dywang@dyw219 zzz]$ cat hello.c

2 #include <stdio.h>main() {

4 printf("Hello!\n");}

6[dywang@dyw219 zzz]$ cat hello1.c

8 #include <stdio.h>main() {

10 printf("Hello!\n");}� �

3. 程式 hello.c hello2.c 程式 hello2.c#include <stdio.h> 式 main

程式�1 [dywang@dyw219 zzz]$ cat hello.c

#include <stdio.h>3 main() {

printf("Hello!\n");5 }

[dywang@dyw219 zzz]$ cat hello2.c7 #include <stdio.h>

9 main() {printf("Hello!\n");

11 }� �4. hello2.c printf 式�

1 [dywang@dyw219 zzz]$ vim hello2.c[dywang@dyw219 zzz]$ cat hello2.c

3 #include <stdio.h>

5 main() {/* print Hello! */

7 printf("Hello!\n");}� �

5.5

1.

(a) zzz

(b) zzz

De-Yu Wang CSIE CYUT 34

Page 37: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

5.5. CHAPTER 5.

(c) cbase1.tar.gz

(d) cbase1.tar.gz

(e) cbase1

(f)

2. C 語言語

(a) token1 token

(b) identifier1 ( )

(c) 式 identifier2

(d) keyword1 C 語言 ( )

(e) ( ) keyword2 C 語言

(f) 式 debug1.c debug1

(g) 式 debug2.c debug2

(h) 式 debug3.c debug3

De-Yu Wang CSIE CYUT 35

Page 38: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 6

6.1 言

1. C 語言

2.bytes

char 1 -128 to 127 or 0 to 255unsigned char 1 0 to 255signed char 1 -128 to 127int 2 or 4 -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647unsigned int 2 or 4 0 to 65,535 or 0 to 4,294,967,295short 2 -32,768 to 32,767unsigned short 2 0 to 65,535long 8 -9223372036854775808 to 9223372036854775807unsigned long 8 0 to 18446744073709551615

3.bytes

float 4 1.2E-38 to 3.4E+38double 8 2.3E-308 to 1.7E+308long double 10 3.4E-4932 to 1.1E+4932

6.2 sizeof

1. sizeof 式

2. bytes�[dywang@dyw219 zzz]$ vim sizeof1.c

2 [dywang@dyw219 zzz]$ cat sizeof1.c#include <stdio.h>

4main() {

6 printf("sizeof(char) = %d\n", sizeof(char));printf("sizeof(short) = %d\n", sizeof(short));

8 printf("sizeof(int) = %d\n", sizeof(int));

36

Page 39: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.3. CHAPTER 6.

printf("sizeof(long) = %d\n", sizeof(long));10 printf("sizeof(float) = %d\n", sizeof(float));

printf("sizeof(double) = %d\n", sizeof(double));12 }� �

3. �[dywang@dyw219 zzz]$ gcc -o sizeof1 sizeof1.c� �

4. �1 [dywang@dyw219 zzz]$ ./sizeof1

sizeof(char) = 13 sizeof(short) = 2

sizeof(int) = 45 sizeof(long) = 8

sizeof(float) = 47 sizeof(double) = 8� �

6.3

1.

(a) char

(b) int

(c) float

(d) double

(e) void

2. �1 int i, j, k;

char c, ch;3 float f, salary;

double d;� �3. �

int a, b;2 a=10;

b=20;� �De-Yu Wang CSIE CYUT 37

Page 40: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.4. CHAPTER 6.

4. �1 int a=10, b=20;� �

5. Lvalues and Rvalues

(a) Lvalues: 式 Lvalues�1 int a=20, b;

b = a;� �(b) Rvalues: 式 Rvalues�

int a=20, b;2 b = 10;� �

6.4

1. bytes (overflow)

2. short 32767�[dywang@dyw219 zzz]$ vim overflow1.c

2 [dywang@dyw219 zzz]$ cat overflow1.c#include <stdio.h>

4main() {

6 short a, b=32767;a = b + 1;

8 printf("32767 + 1 = %d\n", a);}� �

3. �1 [dywang@dyw219 zzz]$ gcc -o overflow1 overflow1.c� �

4. �1 [dywang@dyw219 zzz]$ ./overflow1

32767 + 1 = -32768� �De-Yu Wang CSIE CYUT 38

Page 41: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.5. CHAR CHAPTER 6.

6.5 char

1. char 1 byte ASCII'A' 65

2. ASCII�[dywang@dyw219 zzz]$ vim char1.c

2 [dywang@dyw219 zzz]$ cat char1.c#include <stdio.h>

4main() {

6 char ch='A';printf("ASCII of A = %d\n", ch);

8 ch=65;printf("ASCII 65 = %c\n", ch);

10 }� �3. �

[dywang@dyw219 zzz]$ gcc -o char1 char1.c� �4. �

1 [dywang@dyw219 zzz]$ ./char1ASCII of A = 65

3 ASCII 65 = A� �5. �

1 char ch='6';char ch=6;� �

6.6

1. \ \n\t tab

2. man echo (escape sequcnce)�\\ backslash

2 \a alert (BEL)\b backspace

De-Yu Wang CSIE CYUT 39

Page 42: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.7. CHAPTER 6.

4 \c produce no further output\e escape

6 \f form feed\n new line

8 \r carriage return\t horizontal tab

10 \v vertical tab� �3. (tab)�

[dywang@dyw219 zzz]$ vim char2.c2 [dywang@dyw219 zzz]$ cat char2.c

#include <stdio.h>4

main() {6 char ch1='\t', ch2='\n';

printf("A %c B %c", ch1,ch2);8 printf("ch1 = %d, ch2 = %d\n", ch1,ch2);

}� �4. �

1 [dywang@dyw219 zzz]$ gcc -o char2 char2.c� �5. %c char %d char ASCII�

1 [dywang@dyw219 zzz]$ ./char2A B

3 ch1 = 9, ch2 = 10� �

6.7

1. 語�1 (data type) variable_name� �

2.

De-Yu Wang CSIE CYUT 40

Page 43: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.7. CHAPTER 6.

..long double.

double

.

float

.

unsigned long long

.

long long

.

unsigned long

.

long

.

unsigned int

.

int

3. �1 [dywang@dyw219 zzz]$ vim typetran1.c

[dywang@dyw219 zzz]$ cat typetran1.c3 #include <stdio.h>

5 main() {int n1, n2;

7 float f1=3.14159, f2=5.987;n1 = (int) f1;

9 n2 = (int) f2;printf("f1 = %f, n1 = %d\n", f1, n1);

11 printf("f2 = %f, n2 = %d\n", f2, n2);}� �

4. �[dywang@dyw219 zzz]$ gcc -o typetran1 typetran1.c� �

5. �1 [dywang@dyw219 zzz]$ ./typetran1

f1 = 3.141590, n1 = 33 f2 = 5.987000, n2 = 5� �

De-Yu Wang CSIE CYUT 41

Page 44: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

6.8. CHAPTER 6.

6.8

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 dtype1.c unsigned short sidTAB dtype1

(b) 程式 dtype2.c short a b a 32000 32000 +800 = xxxxxx xxxxxx 程式 b = a + 800

dtype2

(c) 程式 dtype3.c char ch='#' ( )ASCII of # = XX ASCII XX = # XX #ASCII dtype3

(d) 程式 dtype4.c char ch1, ch2, ch3, ch4'\n', '4', '\t', 'g' ch2, ch3, ch4, ch3, ch2, ch1

dtype4

(e) dtype2.c 程式 dtype5.c b int 32000 + 800 =xxxxxx xxxxxx 程式 b = a + 800

a int dtype5

De-Yu Wang CSIE CYUT 42

Page 45: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 7

7.1 言

1. C 程式語言 Linux式 式 ( )

stdin getchar() gets() scanf()

stdout putchar() puts() printf()

stderr

7.2

1. �1 [dywang@dyw219 zzz]$ vim stdio1.c

[dywang@dyw219 zzz]$ cat stdio1.c3 #include <stdio.h>

5 main () {char c;

7printf( "Enter a character: ");

9 c = getchar( );printf( "You entered: ");

11 putchar(c);printf( "\n");

13 }� �2. �

1 [dywang@dyw219 zzz]$ gcc -o stdio1 stdio1.c� �3.

43

Page 46: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

7.3. CHAPTER 7.

�1 [dywang@dyw219 zzz]$ ./stdio1

Enter a character: A3 You entered: A� �

7.3

1. �1 [dywang@dyw219 zzz]$ vim stdio2.c

[dywang@dyw219 zzz]$ cat stdio2.c3 #include <stdio.h>

5 main () {char str[100];

7printf( "Enter a string: ");

9 //gets(str);fgets(str, 100, stdin);

11 printf( "You entered: ");puts(str);

13 }� �2. stdio2 gcc gets 式�

1 [dywang@dyw219 zzz]$ gcc -o stdio2 stdio2.cstdio2.c: In function main:

3 stdio2.c:7:2: warning: gets is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]

gets(str);5 ^� �

3. gets fgets�1 //gets(str);

fgets(str, 100, stdin);3 [dywang@dyw219 zzz]$ gcc -o stdio2 stdio2.c� �

4. �1 [dywang@dyw219 zzz]$ ./stdio2

Enter a string: qwe asd3 You entered: qwe asd� �

De-Yu Wang CSIE CYUT 44

Page 47: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

7.4. CHAPTER 7.

7.4

1. stdio1.c stdio2.c�1 [dywang@dyw219 zzz]$ vim stdio3.c

[dywang@dyw219 zzz]$ cat stdio3.c3 #include <stdio.h>

5 main () {char c;

7 char str[100];

9 printf( "Enter a character: ");c = getchar( );

11 printf( "You entered: " );putchar(c);

13 printf( "\n" );printf( "Enter a string: ");

15 //gets( str );fgets( str, 100, stdin );

17 printf( "You entered: " );puts(str);

19 }� �2. �

1 [dywang@dyw219 zzz]$ gcc -o stdio3 stdio3.c� �3. A Enter 程式�

1 [dywang@dyw219 zzz]$ ./stdio3Enter a character: A

3 You entered: AEnter a string: You entered:� �

4. "A qwe rty" Enter " qwe rty"Enter getchar

fgets�1 [dywang@dyw219 zzz]$ gcc -o stdio3 stdio3.c

[dywang@dyw219 zzz]$ ./stdio33 Enter a character: A qwe rty

You entered: A5 Enter a string: You entered: qwe rty� �

5. 式 putchar 11.6 while

De-Yu Wang CSIE CYUT 45

Page 48: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

7.5. CHAPTER 7.

7.5

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 getput1.c getcharputchar getput1

(b) 程式 getput2.c fgetsputs getput2

(c) 程式 getput3.c fgetsputs getchar

putchargetput3

De-Yu Wang CSIE CYUT 46

Page 49: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 8

8.1 言

1. stdio.h (standard input/output ) 式

2. 式 式 printf() 式

3. 式 式 scanf() 式

8.2 printf 式

1. printf 語 式 式 int�1 int printf(" 式 ", 1, 2, ...)� �

2. 式 %d, %s 式 id name式 %d %s�

1 printf("sid = %d, myname = %s\n", id, name)� �3. printf 式

式%c%d, %i%ld%e e 式%f 式%o%s%u%x%%

47

Page 50: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.3. PRINTF CHAPTER 8. 式

4. �1 [dywang@dyw219 zzz]$ vim fstdio1.c

[dywang@dyw219 zzz]$ cat fstdio1.c3 #include <stdio.h>

5 main() {int pass=90;

7 printf("C %u%% PASS\n", pass);}� �

5. �[dywang@dyw219 zzz]$ gcc -o fstdio1 fstdio1.c

2 [dywang@dyw219 zzz]$ ./fstdio1C 90% PASS� �

8.3 printf

1. printf 式 式 (flags)

- %-4d 4+ %+5d 5(space) % 6f 6 10 0 %010.2f 10 2 5 0

2. �1 [dywang@dyw219 zzz]$ cat fstdio2.c

#include <stdio.h>3

main() {5 int a=-9, b=679, c=-679;

float d=-3.1415, e=3.1415, f=-792.324;7 printf("a=%-4d\tb=%+5d\tc=%+5d\n", a, b, c);

printf("d=% 6f\te=% 6f\tf=%010.2f\n", d, e, f);9 }� �

3. �[dywang@dyw219 zzz]$ gcc -o fstdio2 fstdio2.c� �

De-Yu Wang CSIE CYUT 48

Page 51: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.4. SCANF 式 CHAPTER 8. 式

4. �1 [dywang@dyw219 zzz]$ ./fstdio2

a=-9 b= +679 c= -6793 d=-3.141500 e= 3.141500 f=-000792.32� �

8.4 scanf 式

1. scanf 語 式 式&

�1 int scanf(" 式 ", &1, &2, ...)� �

2. scanf 式式

%c%d%ld%e e 式%f 式%o%s%u%x

8.5 scanf

1. �1 [dywang@dyw219 zzz]$ vim fstdio3.c

[dywang@dyw219 zzz]$ cat fstdio3.c3 #include <stdio.h>

5 main() {int a, b;

7 printf("Enter TWO integers:\n");scanf("%d %d", &a, &b);

9 printf("%d * %d = %d\n", a, b, a*b);}� �

2.

De-Yu Wang CSIE CYUT 49

Page 52: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.5. SCANF CHAPTER 8. 式

�[dywang@dyw219 zzz]$ gcc -o fstdio3 fstdio3.c� �

3. �1 [dywang@dyw219 zzz]$ ./fstdio3

Enter TWO integers:3 12 -9

12 * -9 = -108� �4. 程式 scanf 式 &�

scanf("%d %d", a, b);� �5. 式

�1 [dywang@dyw219 zzz]$ vim fstdio4.c

[dywang@dyw219 zzz]$ cat fstdio4.c3 #include <stdio.h>

5 main() {float a, b;

7 printf("Input TWO floats: %%f %%e\n");scanf("%f %e", &a, &b);

9 printf("%f * %e = %e\n", a, b, a*b);}� �

6. �[dywang@dyw219 zzz]$ gcc -o fstdio4 fstdio4.c� �

7. �1 [dywang@dyw219 zzz]$ ./fstdio4

Input TWO floats: %f %e3 3.2345 1.28e3

3.234500 * 1.280000e+03 = 4.140160e+03� �8. 程式 scanf 式 , 程式

De-Yu Wang CSIE CYUT 50

Page 53: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.6. SCANF CHAPTER 8. 式

�scanf("%f %e", a, b);� �

8.6 scanf

1. ACSII code�1 [dywang@dyw219 zzz]$ vim fstdio5.c

[dywang@dyw219 zzz]$ cat fstdio5.c3 #include <stdio.h>

5 main() {char a;

7 printf("Enter a character: ");scanf("%c", &a);

9 printf("char=%c\tASCII code=%d\n", a, a);}� �

2. �[dywang@dyw219 zzz]$ gcc -o fstdio5 fstdio5.c� �

3. �1 [dywang@dyw219 zzz]$ ./fstdio5

Enter a character: H3 char=H ASCII code=72� �

4. IP�1 [dywang@dyw219 zzz]$ vim fstdio6.c

[dywang@dyw219 zzz]$ cat fstdio6.c3 #include <stdio.h>

5 main() {char a[20];

7 printf("Enter your ip: ");scanf("%s", &a);

9 printf("Your IP: %s\n", a);}� �

5.

De-Yu Wang CSIE CYUT 51

Page 54: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.7. SCANF CHAPTER 8. 式

�[dywang@dyw219 zzz]$ gcc -o fstdio6 fstdio6.c� �

6. �1 [dywang@dyw219 zzz]$ ./fstdio6

Enter your ip: 192.168.1.1403 Your IP: 192.168.1.140� �

7. a 20 20�1 char a[20];� �

8.7 scanf

1. scanf�1 [dywang@dyw219 zzz]$ vim fstdio7.c

[dywang@dyw219 zzz]$ cat fstdio7.c3 #include <stdio.h>

5 main() {int a;

7 printf("Enter a number: ");scanf("%d", &a);

9 printf("a=%d\n", a);}� �

2. �[dywang@dyw219 zzz]$ gcc -o fstdio7 fstdio7.c� �

3. 345�1 [dywang@dyw219 zzz]$ ./fstdio7

Enter a number: 3453 a=345� �

4. qwe123 0

De-Yu Wang CSIE CYUT 52

Page 55: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.8. SCANF CHAPTER 8. 式

�1 [dywang@dyw219 zzz]$ ./fstdio7

Enter a number: qwe1233 a=0� �

5. 456rty 456

�1 [dywang@dyw219 zzz]$ ./fstdio7

Enter a number: 456rty3 a=456� �

6. " 897yui" 897

�1 [dywang@dyw219 zzz]$ ./fstdio7

Enter a number: 897yui3 a=897� �

7.

8.8 scanf

1. scanf

2. fstdio7.c�1 [dywang@dyw219 zzz]$ vim fstdio8.c

[dywang@dyw219 zzz]$ cat fstdio8.c3 #include <stdio.h>

5 main() {int a;

7 char b[10];printf("Enter a number: ");

9 scanf("%d", &a);printf("a=%d\n", a);

11 printf("Enter a string: ");scanf("%s", &b);

13 printf("b=%s\n", b);}� �

3.

De-Yu Wang CSIE CYUT 53

Page 56: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.9. SCANF CHAPTER 8. 式

�[dywang@dyw219 zzz]$ gcc -o fstdio8 fstdio8.c� �

4. 482abc Enter 程式 482abc

�1 [dywang@dyw219 zzz]$ ./fstdio8

Enter a number: 482abc3 a=482

Enter a string: b=abc� �5. 123 Enter abc�

[dywang@dyw219 zzz]$ ./fstdio82 Enter a number: 123

a=1234 Enter a string: abc

b=abc� �6. scanf scanf

8.9 scanf

1. fstdio8.c ACSII code�1 [dywang@dyw219 zzz]$ vim fstdio9.c

[dywang@dyw219 zzz]$ cat fstdio9.c3 #include <stdio.h>

5 main() {int a;

7 char b;printf("Enter a number: ");

9 scanf("%d", &a);printf("a=%d\n", a);

11 printf("Enter a character: ");scanf("%c", &b);

13 printf("b=%c\tACSII code=%d\n", b,b);}� �

2.

De-Yu Wang CSIE CYUT 54

Page 57: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.10. SCANF CHAPTER 8. 式

�[dywang@dyw219 zzz]$ gcc -o fstdio9 fstdio9.c� �

3. 123 Enter 程式ACSII code=10 ascii code 10 Enter

b=�1 [dywang@dyw219 zzz]$ ./fstdio9

Enter a number: 1233 a=123

Enter a character: b=5 ACSII code=10� �

4.

8.10 scanf

1. fstdio9.cfflush(stdin) 式

式 \n�1 [dywang@dyw219 zzz]$ vim fstdio10.c

[dywang@dyw219 zzz]$ cat fstdio10.c3 #include <stdio.h>

5 main() {int a;

7 char b;printf("Enter a number: ");

9 scanf("%d", &a);printf("a=%d\n", a);

11 printf("Enter a character: ");scanf("\n%c", &b);

13 printf("b=%c\tACSII code=%d\n", b,b);}� �

2. �[dywang@dyw219 zzz]$ gcc -o fstdio10 fstdio10.c� �

3. 123 Enter w 程式w ACSII code=119

De-Yu Wang CSIE CYUT 55

Page 58: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.11. CHAPTER 8. 式

�1 [dywang@dyw219 zzz]$ ./fstdio10

Enter a number: 1233 a=123

Enter a character: w5 b=w ACSII code=119� �

4. 123w Enter w ACSIIcode=119�1 [dywang@dyw219 zzz]$ ./fstdio10

Enter a number: 123w3 a=123

Enter a character: b=w ACSII code=119� �

8.11

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 formatio1.c fgetsformatio1 string test!( )�

13 "string test!"� �include string.h strlen

'\n' '\0'(b) formatio1.c 程式 formatio2.c fgets

5 2 式 123.45num=00123.45 formatio2

include stdlib.h atof 式 double printf

(c) 程式 formatio3.c IP ( ) scanf( IP

式) 192.168.1.IP , , ( "," )10927000 111

formatio3

De-Yu Wang CSIE CYUT 56

Page 59: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

8.11. CHAPTER 8. 式

�1

IP 10927000 1113 192.168.1.111,10927000,� �

(d) 程式 formatio4.c scanfformatio4�

Enter TWO numbers with two chars: 12we342 e-w : 12 + 34 = 46� �

(e) 程式 formatio5.c scanfformatio5

scanf 式 %s %[^0-9-]�Enter TWO numbers with a string: -98qwert-12

2 qwert : -98 + -12 = -110� �

De-Yu Wang CSIE CYUT 57

Page 60: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 9

9.1 式

1. 式 (operand) (operator)�c = a + 3;� �

(a) c, a 3

(b) = +

2. = a + 3c = (assignment operator)

3. ...

4. 式 ...

9.2

1. (unary operator) + +6 6 6- -6 6! NOT !b b NOT

2. �1 [dywang@dyw219 zzz]$ vim op-un1.c

[dywang@dyw219 zzz]$ cat op-un1.c3 #include <stdio.h>

5 main() {int a, c=-6;

7 a = +c;printf("a = +c = %d\n", a);

9 a = -c;

58

Page 61: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.3. CHAPTER 9.

printf("a = -c = %d\n", a);11 a = !c;

printf("a = !c = %d\n", a);13 }� �

3. �1 [dywang@dyw219 zzz]$ gcc -o op-un1 op-un1.c� �

4. �1 [dywang@dyw219 zzz]$ ./op-un1

a = +c = -63 a = -c = 6

a = !c = 0� �

9.3

1. (Arithmetic Operators)

+ a+6 a + 6- a-6 a - 6* a*6 a * 6/ a/6 a / 6% a%6 a / 6++ a++, ++a a 1-- a--, --a a 1

2. �[dywang@dyw219 zzz]$ vim op-ari1.c

2 [dywang@dyw219 zzz]$ cat op-ari1.c#include <stdio.h>

4main() {

6 int a, c=5;a = c + 3;

8 printf("a = c + 3 = %d\n", a);a = c - 3;

10 printf("a = c - 3 = %d\n", a);a = c * 3;

12 printf("a = c * 3 = %d\n", a);a = c / 3;

14 printf("a = c / 3 = %d\n", a);a = c % 3;

16 printf("a = c % 3 = %d\n", a);

De-Yu Wang CSIE CYUT 59

Page 62: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.4. CHAPTER 9.

a = c++;18 printf("a = c++ = %d, c = %d\n", a, c);

a = ++c;20 printf("a = ++c = %d, c = %d\n", a, c);

a = c--;22 printf("a = c-- = %d, c = %d\n", a, c);

a = --c;24 printf("a = --c = %d, c = %d\n", a, c);

}� �3. �

1 [dywang@dyw219 zzz]$ gcc -o op-ari1 op-ari1.c� �4. �

1 [dywang@dyw219 zzz]$ ./op-ari1a = c + 3 = 8

3 a = c - 3 = 2a = c * 3 = 15

5 a = c / 3 = 1a = c % 3 = 2

7 a = c++ = 5, c = 6a = ++c = 7, c = 7

9 a = c-- = 7, c = 6a = --c = 5, c = 5� �

9.4

1. (Relational Operators)

== a==6 a 6!= a!=6 a 6> a>6 a 6< a<6 a 6>= a>=6 a 6<= a<=6 a 6

2. �[dywang@dyw219 zzz]$ vim op-rel1.c

2 [dywang@dyw219 zzz]$ cat op-rel1.c#include <stdio.h>

4main() {

6 int a, b;

De-Yu Wang CSIE CYUT 60

Page 63: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.4. CHAPTER 9.

8 printf("Enter TWO integers: ");scanf("%d %d", &a, &b);

10if ( a == b ) printf("%d == %d\n", a, b );

12 if ( a != b ) printf("%d != %d\n", a, b );if ( a > b ) printf("%d > %d\n", a, b );

14 if ( a < b ) printf("%d < %d\n", a, b );if ( a >= b ) printf("%d >= %d\n", a, b );

16 if ( a <= b ) printf("%d <= %d\n", a, b );}� �

3. �1 [dywang@dyw219 zzz]$ gcc -o op-rel1 op-rel1.c� �

4. �1 [dywang@dyw219 zzz]$ ./op-rel1

Enter TWO integers: 2 33 2 != 3

2 < 3� �5. �

[dywang@dyw219 zzz]$ ./op-rel12 Enter TWO integers: 3 3

3 == 34 3 >= 3

3 <= 3� �6. �

1 [dywang@dyw219 zzz]$ ./op-rel1Enter TWO integers: 4 2

3 4 != 24 > 2

5 4 >= 2� �

De-Yu Wang CSIE CYUT 61

Page 64: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.5. CHAPTER 9.

9.5

1. (Logical Operators) && AND a&&b a AND b|| OR a||b a OR b! NOT !a NOT a

2. �1 [dywang@dyw219 zzz]$ vim op-log1.c

[dywang@dyw219 zzz]$ cat op-log1.c3 #include <stdio.h>

5 main() {int a, b;

7printf("Enter TWO integers: ");

9 scanf("%d %d", &a, &b);

11 if ( a>0 && b>0 ) printf("%d>0 AND %d>0\n", a, b );if ( a>0 || b>0 ) printf("%d>0 OR %d>0\n", a, b );

13 if ( !( a>0 ) ) printf("NOT %d>0\n", a );}� �

3. �[dywang@dyw219 zzz]$ gcc -o op-log1 op-log1.c� �

4. �1 [dywang@dyw219 zzz]$ ./op-log1

Enter TWO integers: 2 33 2>0 AND 3>0

2>0 OR 3>0� �5. �

[dywang@dyw219 zzz]$ ./op-log12 Enter TWO integers: 2 -3

2>0 OR -3>0� �6.

De-Yu Wang CSIE CYUT 62

Page 65: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.6. BITWISE CHAPTER 9.

�1 [dywang@dyw219 zzz]$ ./op-log1

Enter TWO integers: -2 53 -2>0 OR 5>0

NOT -2>0� �

9.6 Bitwise

1. bitwise 式 and, or, exclusiveor,complement, left shift, right shiftp q p&q p|q p^q0 0 0 0 00 1 0 1 11 1 1 1 01 0 0 1 1

2. A=60(00111100) B=13(00001101)

& Binary AND (A&B)=12 (00001100)| Binary OR (A|B)=61 (00111101)^ Binary XOR (A^B)=49 (00110001)~ Binary Ones complement (~A)=-61 (11000011)<< Binary left shift A<<2=240 (11110000)>> Binary right shift A>>2=15 (00001111)

3. 程式 A=60(00111100) B=13(00001101)�[dywang@dyw219 zzz]$ vim op-bw1.c

2 [dywang@dyw219 zzz]$ cat op-bw1.c#include <stdio.h>

4main() {

6 unsigned int a = 60; /* 60 = 0011 1100 */unsigned int b = 13; /* 13 = 0000 1101 */

8 int c = 0;

10 c = a & b; /* 12 = 0000 1100 */printf("00111100 & 00001101 = %d (00001100)\n", c );

12c = a | b; /* 61 = 0011 1101 */

14 printf("00111100 | 00001101 = %d (00111101)\n", c );

16 c = a ^ b; /* 49 = 0011 0001 */printf("00111100 ^ 00001101 = %d (00110001)\n", c );

18c = ~a; /*-61 = 1100 0011 */

20 printf("~00111100 = %d (11000011)\n", c );

22 c = a << 2; /* 240 = 1111 0000 */

De-Yu Wang CSIE CYUT 63

Page 66: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.7. CHAPTER 9.

printf("00111100 << 2 = %d (11110000)\n", c );24

c = a >> 2; /* 15 = 0000 1111 */26 printf("00111100 >> 2 = %d (00001111)\n", c );

}� �4. �

1 [dywang@dyw219 zzz]$ gcc -o op-bw1 op-bw1.c� �5. �

1 [dywang@dyw219 zzz]$ ./op-bw100111100 & 00001101 = 12 (00001100)

3 00111100 | 00001101 = 61 (00111101)00111100 ^ 00001101 = 49 (00110001)

5 ~00111100 = -61 (11000011)00111100 << 2 = 240 (11110000)

7 00111100 >> 2 = 15 (00001111)� �6. bc�

1 [dywang@dyw219 zzz]$ echo 'obase=2;15' | bc1111

3 [dywang@dyw219 zzz]$ echo 'obase=2;240' | bc11110000� �

9.7

1. (Assignment Operators)

= C=A+B+= C+=A, C=C+A-= C-=A, C=C-A*= C*=A, C=C*A/= C/=A, C=C/A%= C%=A, C=C%A<<= left shift C<<2, C=C<<2>>= right shift C>>2, C=C>>2&= bitwise AND C&=2, C=C&2^= bitwise exclusive OR C^=2, C=C^2|= bitwise OR C|=2, C=C|2

De-Yu Wang CSIE CYUT 64

Page 67: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.7. CHAPTER 9.

2. 程式�[dywang@dyw219 zzz]$ vim op-as1.c

2 [dywang@dyw219 zzz]$ cat op-as1.c#include <stdio.h>

4main() {

6 int a, c;

8 printf("Enter an integer: ");scanf("%d", &a);

10c = a;

12 printf("c = a, c = %d\n", c );

14 c += a;printf("c += a, c = %d\n", c );

16c -= a;

18 printf("c -= a, c = %d\n", c );

20 c *= a;printf("c *= a, c = %d\n", c );

22c /= a;

24 printf("c /= a, c = %d\n", c );

26 c = 200;c %= a;

28 printf("c = 200\nc %= a, c = %d\n", c );

30 a <<= 2;printf("a <<= 2, a = %d\n", a );

32a >>= 2;

34 printf("a >>= 2, a = %d\n", a );

36 a &= 2;printf("a &= 2, a = %d\n", a );

38a ^= 2;

40 printf("a ^= 2, a = %d\n", a );

42 a |= 2;printf("a |= 2, a = %d\n", a );

44 }� �3. �

[dywang@dyw219 zzz]$ gcc -o op-as1 op-as1.c� �

De-Yu Wang CSIE CYUT 65

Page 68: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.8. CHAPTER 9.

4. �1 [dywang@dyw219 zzz]$ ./op-as1

Enter an integer: 213 c = a, c = 21

c += a, c = 425 c -= a, c = 21

c *= a, c = 4417 c /= a, c = 21

c = 2009 c %= a, c = 11

a <<= 2, a = 8411 a >>= 2, a = 21

a &= 2, a = 013 a ^= 2, a = 2

a |= 2, a = 2� �

9.8

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 operator1.c scanf ---- 7 25 25 -- 77 -- 4

operator1 F = 9/5 * C + 32

(b) 程式 operator2.c scanf 1 =1.609344 25 25 mi = 40.23 km

operator2

(c) 程式 operator3.c scanf a bint

operator3 if 式

�arithmetic expression: 98+-12

2 a + b = 98 + -12 = 86arithmetic expression: 98--12

4 a - b = 98 - -12 = 110arithmetic expression: 98*-12

6 a * b = 98 * -12 = -1176arithmetic expression: 98/-12

8 a / b = 98 / -12 = -8� �De-Yu Wang CSIE CYUT 66

Page 69: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

9.8. CHAPTER 9.

(d) operator3.c 程式 operator4.c scanf a bb

b b boperator4 if 式

�arithmetic expression: 98+-12

2 a + b = 98 - 12 = 86arithmetic expression: 98--12

4 a - b = 98 + 12 = 110arithmetic expression: 98*-12

6 a * b = 98 * -12 = -1176arithmetic expression: 98/-12

8 a / b = 98 / -12 = -8� �(e) 程式 operator5.c scanf a b

a, b bitwise 式operator5�

Enter TWO numbers: 3 72 3 & 7 = 3

3 | 7 = 74 3 ^ 7 = 4

~3 = -4, ~7 = -86 3 >> 1 = 1, 7 << 2 = 28� �

De-Yu Wang CSIE CYUT 67

Page 70: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 10

10.1 言

1. C 語言 non-zero, non-null true zero null false

2. 程式

3. C 語言 if, if...else, switch, ?:

10.2 if statement

1. 程

..

condition?

.

condition code

..

true

.

false

2. 語 �if(boolean_expression)

2 {/* statement(s) will execute if the boolean expression is true */

4 }� �3. �

[dywang@dyw219 zzz]$ vim if1.c2 [dywang@dyw219 zzz]$ cat if1.c

68

Page 71: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.2. IF STATEMENT CHAPTER 10.

#include <stdio.h>4

main() {6 int a;

8 printf("Enter an integer: ");scanf("%d", &a);

10if ( a>10 ) {

12 printf("%d > 10\n", a);}

14 printf("a = %d\n", a );}� �

4. �1 [dywang@dyw219 zzz]$ gcc -o if1 if1.c� �

5. �1 [dywang@dyw219 zzz]$ ./if1

Enter an integer: 33 a = 3� �

6. �1 [dywang@dyw219 zzz]$ ./if1

Enter an integer: 133 13 > 10

a = 13� �

De-Yu Wang CSIE CYUT 69

Page 72: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.3. IF...ELSE STATEMENT CHAPTER 10.

10.3 if...else statement

1. 程

..

condition?

.

ture conditioncode

.

false conditioncode

..

true

.

false

2. 語 �if(boolean_expression)

2 {/* statement(s) will execute if the boolean expression is true */

4 }else

6 {/* statement(s) will execute if the boolean expression is false */

8 }� �3. �

[dywang@dyw219 zzz]$ vim if2.c2 [dywang@dyw219 zzz]$ cat if2.c

#include <stdio.h>4

main() {6 int a;

8 printf("Enter an integer: ");scanf("%d", &a);

10if ( a>10 ) {

12 printf("%d > 10\n", a);}

14 else {printf("%d <= 10\n", a);

16 }printf("a = %d\n", a );

18 }� �4.

De-Yu Wang CSIE CYUT 70

Page 73: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.4. NESTED IF STATEMENTS CHAPTER 10.

�[dywang@dyw219 zzz]$ gcc -o if2 if2.c� �

5. �1 [dywang@dyw219 zzz]$ ./if2

Enter an integer: 73 7 <= 10

a = 7� �6. �

[dywang@dyw219 zzz]$ ./if22 Enter an integer: 19

19 > 104 a = 19� �

10.4 nested if statements

1. 語 �if( boolean_expression 1)

2 {/* Executes when the boolean expression 1 is true */

4 if(boolean_expression 2){

6 /* Executes when the boolean expression 2 is true */}

8 }� �2. �

[dywang@dyw219 zzz]$ cat if3.c2 #include <stdio.h>

4 main() {int a;

6printf("Enter an integer: ");

8 scanf("%d", &a);

10 if ( a>10 ) {printf("%d > 10\n", a);

12 if ( a<100) {

De-Yu Wang CSIE CYUT 71

Page 74: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.4. NESTED IF STATEMENTS CHAPTER 10.

printf("%d < 100\n", a);14 }

}16 else {

printf("a <= %d\n", a);18 }

printf("a = %d\n", a );20 }� �

3. �[dywang@dyw219 zzz]$ gcc -o if3 if3.c� �

4. �1 [dywang@dyw219 zzz]$ ./if3

Enter an integer: 53 a <= 5

a = 5� �5. �

[dywang@dyw219 zzz]$ ./if32 Enter an integer: 49

49 > 104 49 < 100

a = 49� �6. �

1 [dywang@dyw219 zzz]$ ./if3Enter an integer: 200

3 200 > 10a = 200� �

De-Yu Wang CSIE CYUT 72

Page 75: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.5. IF...ELSE IF...ELSE STATEMENT CHAPTER 10.

10.5 if...else if...else Statement

1. 程

..

condition 1?

.

ture condition 1code

.

condition 2?

.

true condition 2code

..

true

.

false

.

true

.

false

2. 語 �if(boolean_expression 1)

2 {/* Executes when the boolean expression 1 is true */

4 }else if( boolean_expression 2)

6 {/* Executes when the boolean expression 2 is true */

8 }else if( boolean_expression 3)

10 {/* Executes when the boolean expression 3 is true */

12 }else

14 {/* executes when the none of the above condition is true */

16 }� �3. �

[dywang@dyw219 zzz]$ vim if4.c2 [dywang@dyw219 zzz]$ cat if4.c

#include <stdio.h>4

main() {6 int a;

8 printf("Enter an integer: ");scanf("%d", &a);

10if ( a>10 ) {

12 printf("%d > 10\n", a);}

14 else if ( a<10) {printf("%d < 10\n", a);

De-Yu Wang CSIE CYUT 73

Page 76: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.6. ?: CHAPTER 10.

16 }else {

18 printf("a = 10\n");}

20 }� �4. �

[dywang@dyw219 zzz]$ gcc -o if4 if4.c� �5. �

1 [dywang@dyw219 zzz]$ ./if4Enter an integer: 20

3 20 > 10� �6. �

1 [dywang@dyw219 zzz]$ ./if4Enter an integer: 8

3 8 < 10� �7. �

1 [dywang@dyw219 zzz]$ ./if4Enter an integer: 10

3 a = 10� �

10.6 ?:

1. 語 Exp1 true Exp2 Exp3 varif...else 語 ?: 程式�1 var = Exp1 ? Exp2 : Exp3;� �

2.

De-Yu Wang CSIE CYUT 74

Page 77: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.6. ?: CHAPTER 10.

�1 [dywang@dyw219 zzz]$ vim if5.c

[dywang@dyw219 zzz]$ cat if5.c3 #include <stdio.h>

5 main() {int a, c;

7printf("Enter an integer: ");

9 scanf("%d", &a);

11 c = ( a>0 ) ? a : -a;printf("a = %d, c = %d\n", a, c );

13 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o if5 if5.c� �4. �

1 [dywang@dyw219 zzz]$ ./if5Enter an integer: 10

3 a = 10, c = 10� �5. �

1 [dywang@dyw219 zzz]$ ./if5Enter an integer: -10

3 a = -10, c = 10� �

De-Yu Wang CSIE CYUT 75

Page 78: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.7. SWITCH STATEMENT CHAPTER 10.

10.7 switch statement

1. 程

..

expression?

.

code block 1

.

code block 2

..

code block 3

..

...

.

...

.

code block N

..

case 1

.

case 2

.

case 3

.

default

2. 語 break break�1 switch(expression){

case constant-expression :3 statement(s);

break; /* optional */5 case constant-expression :

statement(s);7 break; /* optional */

9 /* you can have any number of case statements */default : /* Optional */

11 statement(s);}� �

3. �[dywang@dyw219 zzz]$ vim sw1.c

2 [dywang@dyw219 zzz]$ cat sw1.c#include <stdio.h>

4main () {

6 char grade;printf("Enter a char: ");

8 scanf("%c", &grade);

10 switch(grade) {case 'A' :

12 printf("Excellent!\n" );break;

14 case 'B' :

De-Yu Wang CSIE CYUT 76

Page 79: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.7. SWITCH STATEMENT CHAPTER 10.

case 'C' :16 printf("Well done\n" );

break;18 case 'D' :

printf("You passed\n" );20 break;

case 'F' :22 printf("Better try again\n" );

break;24 default :

printf("Invalid grade\n" );26 }

printf("Your grade is %c\n", grade );28 }� �

4. �[dywang@dyw219 zzz]$ gcc -o sw1 sw1.c� �

5. �1 [dywang@dyw219 zzz]$ ./sw1

Enter a char: A3 Excellent!

Your grade is A� �6. A, C, D, F�

[dywang@dyw219 zzz]$ ./sw12 Enter a char: C

Well done4 Your grade is C

[dywang@dyw219 zzz]$ ./sw16 Enter a char: D

You passed8 Your grade is D

[dywang@dyw219 zzz]$ ./sw110 Enter a char: F

Better try again12 Your grade is F� �

7. B breakcase 式 "well done"�

[dywang@dyw219 zzz]$ ./sw1

De-Yu Wang CSIE CYUT 77

Page 80: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.8. GOTO STATEMENT CHAPTER 10.

2 Enter a char: BWell done

4 Your grade is B� �8. E 43 "Invalid grade"�

[dywang@dyw219 zzz]$ ./sw12 Enter a char: E

Invalid grade4 Your grade is E

[dywang@dyw219 zzz]$ ./sw16 Enter a char: 43

Invalid grade8 Your grade is 4� �

10.8 goto statement

1. goto 程式 語 goto ( )

�label_name:

2 statement(s);.....

4goto label_name;� �

2. �1 [dywang@dyw219 zzz]$ vim goto1.c

[dywang@dyw219 zzz]$ cat goto1.c3 #include <stdio.h>

5 main() {int i=0, a, sum=0;

7printf("Enter an integer: ");

9 scanf("%d", &a);

11 add_start:printf("%d", ++i );

13 sum += i;if ( i<a ) {

15 printf("+");goto add_start;

17 }printf("=%d\n", sum );

De-Yu Wang CSIE CYUT 78

Page 81: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.9. NESTED SWITCH STATEMENTS CHAPTER 10.

19 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o goto1 goto1.c� �4. �

1 [dywang@dyw219 zzz]$ ./goto1Enter an integer: 10

3 1+2+3+4+5+6+7+8+9+10=55[dywang@dyw219 zzz]$ ./goto1

5 Enter an integer: 71+2+3+4+5+6+7=28� �

10.9 nested switch statements

1. 語 �switch(ch1) {

2 case 'A':printf("This A is part of outer switch" );

4 switch(ch2) {case 'A':

6 printf("This A is part of inner switch" );break;

8 case 'B': /* case code */}

10 break;case 'B': /* case code */

12 }� �

10.10

1.

(a) zzz

(b) zzz

(c)

De-Yu Wang CSIE CYUT 79

Page 82: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

10.10. CHAPTER 10.

2. C 語言程式

(a) 程式 choice1.c scanf a ba b a+b a-ba=4, b=3 4 + 3 = 7

choice1

(b) 程式 choice2.c scanf a ba b a b binary XOR a b binaryAND a=4, b=3 4 & 3 = 0

choice2

(c) 程式 choice3.c scanf 3-5 Spring, 6-8Summer 9-11 Autumn 12-2 Winter

11 11 : Autumn 13 13 : NOT the monthchoice3

(d) 程式 choice4.c choice1.c if 式 ?:choice4

(e) 程式 choice5.c choice2.c if 式 ?:choice5

(f) 程式 choice6.c choice3.c if 式 switch 式choice6 1, 2, 3, 4 1

12 switch1 程式 a b

�b = (a>0 && a<13) ? (a%12)/3+1 : a;� �

(g) 程式 choice7.c scanf a bSTARTADD label goto a b

a=3, b=6 3+4+5+6=18choice7

(h) choice7.c 程式 choice8.c a bchoice8

De-Yu Wang CSIE CYUT 80

Page 83: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 11

11.1 言

1. (loop)

2.

3. 言 for

4. while do...while

5. do...while

11.2 for loop

1. for 程

..

init

.

condition?

.

block code

.

increment

..

true

.

false

.

2. 語 init condition increment

81

Page 84: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.2. FOR LOOP CHAPTER 11.

�1 for ( init; condition; increment )

{3 statement(s);

}� �3. 1�

[dywang@dyw219 zzz]$ vim for1.c2 [dywang@dyw219 zzz]$ cat for1.c

#include <stdio.h>4

main() {6 int i, a, sum=0;

8 printf("Enter an integer: ");scanf("%d", &a);

10for ( i=1; i<a; i++) {

12 printf("%d+", i );sum += i;

14 }sum += i;

16 printf("%d=%d\n", i,sum );}� �

4. �1 [dywang@dyw219 zzz]$ gcc -o for1 for1.c� �

5. �1 [dywang@dyw219 zzz]$ ./for1

Enter an integer: 103 1+2+3+4+5+6+7+8+9+10=55

[dywang@dyw219 zzz]$ ./for15 Enter an integer: 8

1+2+3+4+5+6+7+8=36� �

De-Yu Wang CSIE CYUT 82

Page 85: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.3. WHILE LOOP CHAPTER 11.

11.3 while loop

1. 程 ..

condition?

.

block code

..

true

.

false

.

2. 語 condition�while(condition)

2 {statement(s);

4 }� �3. 1�

[dywang@dyw219 zzz]$ vim while1.c2 [dywang@dyw219 zzz]$ cat while1.c

#include <stdio.h>4

main() {6 int i=1, a, sum=0;

8 printf("Enter an integer: ");scanf("%d", &a);

10while ( sum < a ) {

12 printf("%d+", i++ );sum += i;

14 }printf("%d=%d\n", i,sum );

16 }� �4. �

[dywang@dyw219 zzz]$ gcc -o while1 while1.c� �

De-Yu Wang CSIE CYUT 83

Page 86: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.4. DO...WHILE LOOP CHAPTER 11.

5. �1 [dywang@dyw219 zzz]$ ./while1

Enter an integer: 233 1+2+3+4+5+6+7=27

[dywang@dyw219 zzz]$ ./while15 Enter an integer: 76

1+2+3+4+5+6+7+8+9+10+11+12=777 Enter an integer: 10

1+2+3+4+5+6+7+8+9+10=55� �6. 0 1=0�

[dywang@dyw219 zzz]$ ./while12 Enter an integer: -3

1=04 [dywang@dyw219 zzz]$ ./while1

Enter an integer: 06 1=0� �

11.4 do...while loop

1. 程 ..

block code

.

condition?

..

false

.

true

2. 語 condition�do {

2 statement(s);

4 }while( condition );� �3. 1 do...while

�[dywang@dyw219 zzz]$ vim dowhile1.c

De-Yu Wang CSIE CYUT 84

Page 87: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.5. CHAPTER 11.

2 [dywang@dyw219 zzz]$ cat dowhile1.c#include <stdio.h>

4main() {

6 int i=1, a, sum=0;

8 do {printf("Enter an integer: ");

10 scanf("%d", &a);} while ( a<=0 );

12while ( sum < a ) {

14 printf("%d+", i++ );sum += i;

16 }printf("%d=%d\n", i,sum );

18 }� �4. �

[dywang@dyw219 zzz]$ gcc -o dowhile1 dowhile1.c� �5. 0 -3 程式 25

�1 [dywang@dyw219 zzz]$ ./dowhile1

Enter an integer: 03 Enter an integer: -3

Enter an integer: 255 1+2+3+4+5+6+7=27� �

11.5

1. (endless loops) 程

2. 1999�1 [dywang@dyw219 zzz]$ vim endlessloop1.c

[dywang@dyw219 zzz]$ cat endlessloop1.c3 #include <stdio.h>

5 main() {int i=1, a, sum=0;

7do {

De-Yu Wang CSIE CYUT 85

Page 88: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.6. CHAPTER 11.

9 printf("Enter an integer: ");scanf("%d", &a);

11 } while ( a!=1999 );

13 while ( sum < a ) {printf("%d+", i++ );

15 sum += i;}

17 printf("%d=%d\n", i,sum );}� �

3. �[dywang@dyw219 zzz]$ gcc -o endlessloop1 endlessloop1.c� �

4. 34, 23, 56, -2, 90 程式Ctrl+C 程式�

1 [dywang@dyw219 zzz]$ ./endlessloop1Enter an integer: 34

3 Enter an integer: 23Enter an integer: 56

5 Enter an integer: -2Enter an integer: 90

7 Enter an integer: ^C� �

11.6

1.

2. for, while, do...while {..}

�1 for (i=1; i<=a; i++)

print("i=%d\n", i);� �3. for ";"

for�for (i=1; i<=a; i++);

2 print("i=%d\n", i);� �

De-Yu Wang CSIE CYUT 86

Page 89: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.6. CHAPTER 11.

4. 程式 程式 CPU

5. 程式

6. �[dywang@dyw219 zzz]$ vim nullloop1.c

2 [dywang@dyw219 zzz]$ cat nullloop1.c#include <stdio.h>

4main() {

6 int i=1, a;

8 do {printf("Enter an integer: ");

10 scanf("%d", &a);} while ( a<=0 );

12for (i=1; i<=a; i++);

14 printf("i=%d\n", i );}� �

7. �1 [dywang@dyw219 zzz]$ gcc -o nullloop1 nullloop1.c� �

8. 程式�1 [dywang@dyw219 zzz]$ ./nullloop1

Enter an integer: 103 i=11

[dywang@dyw219 zzz]$ time ./nullloop15 Enter an integer: 100

i=1017

real 0m1.767s9 user 0m0.000s

sys 0m0.002s11 [dywang@dyw219 zzz]$ time ./nullloop1

Enter an integer: 100000013 i=1000001

15 real 0m3.059suser 0m0.004s

17 sys 0m0.002s[dywang@dyw219 zzz]$ time ./nullloop1

19 Enter an integer: 100000000i=100000001

21

De-Yu Wang CSIE CYUT 87

Page 90: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.7. BREAK CHAPTER 11.

real 0m16.439s23 user 0m0.271s

sys 0m0.002s� �9. 7.4 stdio3.c Enter

11.7 break

1. break

2. for 10

�[dywang@dyw219 zzz]$ vim forbreak1.c

2 [dywang@dyw219 zzz]$ cat forbreak1.c#include <stdio.h>

4main() {

6 int i, a;

8 printf("Enter an integer: ");scanf("%d", &a);

10for ( i=1; i<a; i++) {

12 if (!(i%10)) break;}

14 printf("i = %d\n", i);}� �

3. �1 [dywang@dyw219 zzz]$ gcc -o forbreak1 forbreak1.c� �

4. 10 for 17 i=10

�1 [dywang@dyw219 zzz]$ ./forbreak1

Enter an integer: 43 i = 4

[dywang@dyw219 zzz]$ ./forbreak15 Enter an integer: 17

i = 10� �

De-Yu Wang CSIE CYUT 88

Page 91: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.8. CONTINUS CHAPTER 11.

11.8 continus

1. continus continus

2. 4�[dywang@dyw219 zzz]$ vim forcontinus1.c

2 [dywang@dyw219 zzz]$ cat forcontinus1.c#include <stdio.h>

4main() {

6 int i, a, sum=0;

8 printf("Enter an integer: ");scanf("%d", &a);

10for ( i=1; i<a; i++) {

12 if (!(i%4)) continue;sum += i;

14 }printf("sum = %d\n", sum);

16 }� �3. �

[dywang@dyw219 zzz]$ gcc -o forcontinus1 forcontinus1.c� �4. 13 12�

1 [dywang@dyw219 zzz]$ ./forcontinus1Enter an integer: 13

3 sum = 54[dywang@dyw219 zzz]$ ./forcontinus1

5 Enter an integer: 12sum = 54

7 [dywang@dyw219 zzz]$ ./forcontinus1Enter an integer: 7

9 sum = 17� �

11.9 式

1. 式 (nested loops) for, while, do...while式 語 for while, do...while

De-Yu Wang CSIE CYUT 89

Page 92: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.9. 式 CHAPTER 11.

2. nested for loop 語�1 for ( init; condition; increment ) {

for ( init; condition; increment ) {3 statement(s);

}5 statement(s);

}� �3. nested while loop 語

�while(condition) {

2 while(condition) {statement(s);

4 }statement(s);

6 }� �4. nested do...while loop 語

�do {

2 statement(s);do {

4 statement(s);} while( condition );

6}while( condition );� �

5. (prime)�1 [dywang@dyw219 zzz]$ vim nestedfor1.c

[dywang@dyw219 zzz]$ cat nestedfor1.c3 #include <stdio.h>

5 main() {int i, j, a;

7printf("Enter an integer: ");

9 scanf("%d", &a);

11 for ( i=2; i<a; i++) {for ( j=2; j<i/j; j++ )

13 if (!(i%j)) break; // if factor found, not primeif ( j > i/j ) printf("%d is prime\n", i);

15 }}

De-Yu Wang CSIE CYUT 90

Page 93: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.10. CHAPTER 11.

� �6. �

[dywang@dyw219 zzz]$ gcc -o nestedfor1 nestedfor1.c� �7. �

1 [dywang@dyw219 zzz]$ ./nestedfor1Enter an integer: 10

3 2 is prime3 is prime

5 7 is prime[dywang@dyw219 zzz]$ ./nestedfor1

7 Enter an integer: 1002 is prime

9 3 is prime7 is prime

11 13 is prime23 is prime

13 31 is prime43 is prime

15 47 is prime59 is prime

17 61 is prime73 is prime

19 79 is prime97 is prime� �

11.10

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 loop1.c scanf a b fora b a=3, b=6 3+4+5+6=18

loop1

i. a>b a, bii. a<=0 ( a ) 1

De-Yu Wang CSIE CYUT 91

Page 94: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

11.10. CHAPTER 11.

iii. b<=0 ( b ) b>=20 1 20

(b) 程式 loop2.c scanf a while 1 awhile 20 a

a=5 1+3+5=9loop2

(c) loop2.c 程式 loop3.c while do...while0 32 2 a

a=8 2+4+6+8=20loop3

(d) loop3.c 程式 loop4.c do...while( ) ( return)

式 3loop4

(e) 程式 loop5.c 7.4 stdio3.cEnter loop5

(f) 程式 loop6.c scanf a for continuea 100 5 if a 5

continue a=89 90+95+100=285loop6

(g) loop6.c程式 loop7.c for break 500loop7�

Enter an integer: 342 35+40+45+50+55+60+65+70+75+80=575� �

(h) 程式 loop8.c scanf 3 8 式loop8 4�

00010002 0022200

03333304 4444444� �

De-Yu Wang CSIE CYUT 92

Page 95: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 12

main 式

12.1 言

1. C 程式 式 (function)

2. 式 程式

3. 式

4. C 程式 式 main() 程式 程式 main 式

5. main 式�main(){

2 .....}

4void main( void ) {

6 ....}� �

6. main 式 main 程式

12.2

1. 程式

2. argc argv[]

3. argv[0] 程式argv[0] ./mainfun1�

1 [dywang@dyw219 zzz]$ vim mainfun1.c[dywang@dyw219 zzz]$ cat mainfun1.c

3 #include <stdio.h>

93

Page 96: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.3. CHAPTER 12. MAIN 式

5 main( int argc, char *argv[] ) {int i, sum=0;

7for ( i=1; i<argc-1; i++) {

9 printf("%s+", argv[i]);sum += atoi(argv[i]);

11 }sum += atoi(argv[i]);

13 printf("%s=%d\n", argv[i], sum);}� �

4. �[dywang@dyw219 zzz]$ gcc -o mainfun1 mainfun1.c� �

5. �1 [dywang@dyw219 zzz]$ ./mainfun1 9 4 2 4

9+4+2+4=193 [dywang@dyw219 zzz]$ ./mainfun1 19 14 12 14

19+14+12+14=595 [dywang@dyw219 zzz]$ ./mainfun1 9 4 2 4 9 23

9+4+2+4+9+23=51� �

12.3

1. 式 main 程式 程式 Linux$? 0 程式 0�

[dywang@dyw219 zzz]$ ls mainfunc1.c2 mainfunc1.c

[dywang@dyw219 zzz]$ echo $?4 0

[dywang@dyw219 zzz]$ ls mainfunc1.cc6 ls: cannot access mainfunc1.cc: No such file or directory

[dywang@dyw219 zzz]$ echo $?8 2� �

2. 程式 程式 1�[dywang@dyw219 zzz]$ vim mainfun2.c

De-Yu Wang CSIE CYUT 94

Page 97: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.4. ERRNO CHAPTER 12. MAIN 式

2 [dywang@dyw219 zzz]$ cat mainfun2.c#include <stdio.h>

4int main( int argc, char *argv[] ) {

6 int i, sum=0, tmp;

8 for ( i=1; i<argc-1; i++) {tmp = atoi(argv[i]);

10 if (tmp == 0) {printf("%s NOT a number!\n", argv[i]);

12 return 1;}

14 printf("%s+", argv[i]);sum += atoi(argv[i]);

16 }sum += atoi(argv[i]);

18 printf("%s=%d\n", argv[i], sum);return 0;

20 }� �3. �

[dywang@dyw219 zzz]$ gcc -o mainfun2 mainfun2.c� �4. 0�

1 [dywang@dyw219 zzz]$ ./mainfun2 1 2 3 41+2+3+4=10

3 [dywang@dyw219 zzz]$ echo $?0� �

5. abc 程式 1�[dywang@dyw219 zzz]$ ./mainfun2 1 2 abc

2 1+2+abc NOT a number!� �

12.4 errno

1. C 語言 式 include errno.h errno

2. errno 0 man 3 error

De-Yu Wang CSIE CYUT 95

Page 98: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.4. ERRNO CHAPTER 12. MAIN 式

�[dywang@dyw219 zzz]$ man 3 errno | col -b | grep -E '^\s+E(PERM|NOENT|

ACCES)'2 EACCES Permission denied (POSIX.1)

ENOENT No such file or directory (POSIX.1)4 EPERM Operation not permitted (POSIX.1)� �

3. rename�[dywang@dyw219 zzz]$ vim mainfun3.c

2 [dywang@dyw219 zzz]$ cat mainfun3.c#include <stdio.h>

4 #include <errno.h>

6 int main( int argc, char *argv[] ) {int result;

8if(argc < 2) {

10 printf("Require TWO arguments\n" );return(1);

12 }result = rename( argv[1], argv[2] );

14 if( result != 0 ) {printf("File renaming error ");

16 switch(errno) {case EPERM:

18 printf("%d: Operation not permitted\n", errno);break;

20 case ENOENT:printf("%d: File not found\n", errno);

22 break;case EACCES:

24 printf("%d: Permission denied\n", errno);break;

26 default:printf("%d: Unknown error\n", errno);

28 }return(2);

30 }printf("%d: %s renamed to %s\n", errno, argv[1], argv[2]);

32return(0);

34 }� �4. �

[dywang@dyw219 zzz]$ gcc -o mainfun3 mainfun3.c� �5. a b 2 a

De-Yu Wang CSIE CYUT 96

Page 99: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.5. STDOUT STDERR CHAPTER 12. MAIN 式

�1 [dywang@dyw219 zzz]$ ./mainfun3 a b

File renaming error 2: File not found� �6. touch a a a b 0�

[dywang@dyw219 zzz]$ touch a2 [dywang@dyw219 zzz]$ ./mainfun3 a b

0: a renamed to b� �7. b /root a /root 13�

1 [dywang@dyw219 zzz]$ ./mainfun3 b /root/aFile renaming error 13: Permission denied� �

8. /sbin/blkid a 18�[dywang@dyw219 zzz]$ ./mainfun3 /sbin/blkid a

2 File renaming error 18: Unknown error� �

12.5 STDOUT STDERR

1.STDOUT ( ) (STDERR) 式

(a) (stdout) 1 > >>(b) (stderr) 2 2> 2>>

>, 1>>>, 1>>

command 2>2>>

2. mainfun3 printf stdoutstdout /dev/null stderr /dev/null 程式�

[dywang@dyw219 zzz]$ ./mainfun3 /sbin/blkid a2 File renaming error 18: Unknown error

[dywang@dyw219 zzz]$ ./mainfun3 /sbin/blkid a > /dev/null4 [dywang@dyw219 zzz]$ ./mainfun3 /sbin/blkid a 2> /dev/null

De-Yu Wang CSIE CYUT 97

Page 100: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.5. STDOUT STDERR CHAPTER 12. MAIN 式

File renaming error 18: Unknown error� �3. 式 printf fprintf stderr�

1 [dywang@dyw219 zzz]$ vim mainfun4.c[dywang@dyw219 zzz]$ cat mainfun4.c

3 #include <stdio.h>#include <errno.h>

5int main( int argc, char *argv[] ) {

7 int result;

9 if(argc < 2) {printf("Require TWO arguments\n" );

11 return(1);}

13 result = rename( argv[1], argv[2] );if( result != 0 ) {

15 fprintf(stderr,"File renaming error ");switch(errno) {

17 case EPERM:fprintf(stderr, "%d: Operation not permitted\n", errno);

19 break;case ENOENT:

21 fprintf(stderr, "%d: File not found\n", errno);break;

23 case EACCES:fprintf(stderr, "%d: Permission denied\n", errno);

25 break;default:

27 fprintf(stderr, "%d: Unknown error\n", errno);}

29 return(2);}

31 printf("%d: %s renamed to %s\n", errno, argv[1], argv[2]);

33 return(0);}� �

4. �[dywang@dyw219 zzz]$ gcc -o mainfun4 mainfun4.c� �

5. stderr /dev/null 18stderr�

1 [dywang@dyw219 zzz]$ ./mainfun4 /sbin/blkid a > /dev/nullFile renaming error 18: Unknown error

De-Yu Wang CSIE CYUT 98

Page 101: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.6. 式 PERROR CHAPTER 12. MAIN 式

3 [dywang@dyw219 zzz]$ ./mainfun4 /sbin/blkid a 2> /dev/null� �

12.6 式 perror

1. mainfunc3 mainfun4 程式 errno 0式 perror()

errno perrorSTDERR

2. mainfun5.c 程式 mainfun3.c 程式�1 [dywang@dyw219 zzz]$ vim mainfun5.c

[dywang@dyw219 zzz]$ cat mainfun5.c3 #include <stdio.h>

#include <errno.h>5

int main( int argc, char *argv[] ) {7 int result;

9 if(argc < 2) {printf("Require TWO arguments\n" );

11 return(1);}

13 result = rename( argv[1], argv[2] );if( result != 0 ) {

15 perror("");return(errno);

17 }printf("%d: %s renamed to %s\n", errno, argv[1], argv[2]);

19return(errno);

21 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o mainfun5 mainfun5.c� �4. a b 2�

1 [dywang@dyw219 zzz]$ ./mainfun5 a bNo such file or directory

3 [dywang@dyw219 zzz]$ echo $?2� �

De-Yu Wang CSIE CYUT 99

Page 102: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.7. CHAPTER 12. MAIN 式

5. touch a a a b 0�[dywang@dyw219 zzz]$ touch a

2 [dywang@dyw219 zzz]$ ./mainfun5 a b0: a renamed to b

4 [dywang@dyw219 zzz]$ echo $?0� �

6. b /root a /root 13�1 [dywang@dyw219 zzz]$ ./mainfun5 b /root/a

Permission denied3 [dywang@dyw219 zzz]$ echo $?

13� �7. /sbin/blkid a 18�

[dywang@dyw219 zzz]$ ./mainfun5 /sbin/blkid a2 Invalid cross-device link

[dywang@dyw219 zzz]$ echo $?4 18� �

12.7

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 mfun1.c mfun13�

./mfun1 100 -22 332 111/3=37.000

./mfun1 100 -22 33 104 121/4=30.250� �

De-Yu Wang CSIE CYUT 100

Page 103: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.7. CHAPTER 12. MAIN 式

(b) 程式 mfun2.c a b a>bERROR 0 a<b CORRECT

0 程式mfun2�

./mfun2 2 32 CORRECT

echo $?4 0

./mfun2 10 26 ERROR

echo $?8 1� �

(c) mainfun3.c 2 程式mfun3.cmfun3�

./mfun3 a b2 File renaming error File not found

echo $?4 2

6 ./mfun3 b /root/bFile renaming error Permission denied

8 echo $?13� �

(d) mainfun4.c 2 程式 mfun4.cstderr

mfun4�1 ./mfun4 a b >/dev/null

File renaming error File not found3 echo $?

25 ./mfun4 b /root/b >/dev/null

File renaming error Permission denied7 echo $?

139 ./mfun4 /sbin/blkid b >/dev/null

File renaming error Unknown error11 echo $?

1813 ./mfun4 b a 2>/dev/null

0: b renamed to a15 echo $?

0� �

De-Yu Wang CSIE CYUT 101

Page 104: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

12.7. CHAPTER 12. MAIN 式

(e) 程式 mfun5.c access式 (F_OK) (R_OK) (W_OK)(X_OK) perror 式 程式 errno

mfun5 access 式�#include <unistd.h>

2 int access(const char *pathname, int mode);

4 mode: F_OK R_OK W_OK X_OK� �

�./mfun5 a >/dev/null

2 F_OK: No such file or directoryecho $?

4 2touch a

6 ./mfun5 a >/dev/nullX_OK: Permission denied

8 echo $?13

10 chmod 777 a./mfun5 a 2>/dev/null

12 a OKecho $?

14 0� �

De-Yu Wang CSIE CYUT 102

Page 105: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 13

13.1 言

1. C 程式 式 (function)

2. 式 程式

3. 式 式 式

13.2

1. 式語�return_type function_name( parameter list ) {

2 body of the function}� �

2. 式 max 式 num1, num2

�1 int max(int num1, int num2) {

int result;3

if (num1 > num2)5 result = num1;

else7 result = num2;

9 return result;}� �

103

Page 106: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.3. CHAPTER 13. 式

13.3

1. 式 程式語�

return_type function_name( parameter list );� �2. �

1 int max(int num1, int num2);int max(int, int);� �

3. �[dywang@dyw219 zzz]$ vim function1.c

2 [dywang@dyw219 zzz]$ cat function1.c#include <stdio.h>

4int max(int num1, int num2) {

6 int result;

8 if (num1 > num2) result = num1;else result = num2;

10 return result;}

12main() {

14 int a, b;

16 printf("Enter TWO integers: ");scanf("%d %d", &a, &b);

18printf("a = %d, b = %d, max = %d\n", a, b, max(a,b));

20 }� �4. �

[dywang@dyw219 zzz]$ gcc -o function1 function1.c� �5. �

1 [dywang@dyw219 zzz]$ ./function1Enter TWO integers: 10 20

3 a = 10, b = 20, max = 20[dywang@dyw219 zzz]$ ./function1

De-Yu Wang CSIE CYUT 104

Page 107: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.4. CALL BY VALUE CHAPTER 13. 式

5 Enter TWO integers: 21 11a = 21, b = 11, max = 21� �

13.4 call by value

1. call by value 式 式

2. �[dywang@dyw219 zzz]$ cat function2.c

2 #include <stdio.h>

4 void swap(int x, int y) {int temp;

6temp = x;

8 x = y;y = temp;

10 return;}

12main() {

14 int a, b;

16 printf("Enter TWO integers: ");scanf("%d %d", &a, &b);

18printf("Before swap, a = %d, b = %d\n", a, b);

20 swap(a, b);printf("After swap, a = %d, b = %d\n", a, b);

22 }� �3. �

[dywang@dyw219 zzz]$ gcc -o function2 function2.c� �4. a b�

1 [dywang@dyw219 zzz]$ ./function2Enter TWO integers: 10 20

3 Before swap, a = 10, b = 20After swap, a = 10, b = 20� �

De-Yu Wang CSIE CYUT 105

Page 108: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.5. CALL BY REFERENCE CHAPTER 13. 式

13.5 call by reference

1. call by reference 式 式 式式

2. &a, &b (& ) 式 *x, *y ( * )�

[dywang@dyw219 zzz]$ vim function3.c2 [dywang@dyw219 zzz]$ cat function3.c

#include <stdio.h>4

void swap(int *x, int *y) {6 int temp;

8 temp = *x;*x = *y;

10 *y = temp;return;

12 }

14 main() {int a, b;

16printf("Enter TWO integers: ");

18 scanf("%d %d", &a, &b);

20 printf("Before swap, a = %d, b = %d\n", a, b);swap(&a, &b);

22 printf("After swap, a = %d, b = %d\n", a, b);}� �

3. �1 [dywang@dyw219 zzz]$ gcc -o function3 function3.c� �

4. 式 a b�1 [dywang@dyw219 zzz]$ ./function3

Enter TWO integers: 10 203 Before swap, a = 10, b = 20

After swap, a = 20, b = 105 [dywang@dyw219 zzz]$ ./function3

Enter TWO integers: 21 117 Before swap, a = 21, b = 11

After swap, a = 11, b = 21� �

De-Yu Wang CSIE CYUT 106

Page 109: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.6. * CHAPTER 13. 式

13.6 *

1. 式 式�int func(int, ... ) {

2 ....}

4int main() {

6 func(1, 2, 3);func(1, 2, 3, 4);

8 }� �2.

(a) include stdarg.h

(b) 式 式 , int...

(c) va_list type 式

(d) 式 int va_start va_list(e) va_arg va_list 式

(f) va_end va_list

3. average 式�[dywang@dyw219 zzz]$ vim function5.c

2 [dywang@dyw219 zzz]$ cat function5.c#include <stdio.h>

4 #include <stdarg.h>

6 float average(int num,...) {va_list valist;

8 float sum = 0.0;int i;

10va_start(valist, num);

12 for (i = 0; i < num; i++) {sum += va_arg(valist, int);

14 }va_end(valist);

16return sum/num;

18 }

20 main() {printf("average(2,3,4)=%5.2f\n", average(2,3,4));

22 printf("average(3,3,4,5)=%5.2f\n", average(3,3,4,5));printf("average(4,3,4,12,9)=%5.2f\n", average(4,3,4,12,9));

24 printf("average(5,3,4,65,11,39)=%5.2f\n", average(5,3,4,65,11,39));}

De-Yu Wang CSIE CYUT 107

Page 110: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.7. CHAPTER 13. 式

� �4. �

1 [dywang@dyw219 zzz]$ gcc -o function5 function5.c� �5. 式 average�

1 [dywang@dyw219 zzz]$ ./function5average(2,3,4)= 3.50

3 average(3,3,4,5)= 4.00average(4,3,4,12,9)= 7.00

5 average(5,3,4,65,11,39)=24.40� �

13.7

1.

(a) (local variable) 式 式

(b) (global variable) 式 式

(c) (static variable)式

2. 式 式

3. 程式 function2.c�1 [dywang@dyw219 zzz]$ vim function6.c

[dywang@dyw219 zzz]$ cat function6.c3 #include <stdio.h>

5 int x, y;

7 void swap(void) {int temp;

9temp = x;

11 x = y;y = temp;

13 return;}

15main() {

17 printf("Enter TWO integers: ");

De-Yu Wang CSIE CYUT 108

Page 111: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.7. CHAPTER 13. 式

scanf("%d %d", &x, &y);19

printf("Before swap, x = %d, y = %d\n", x, y);21 swap();

printf("After swap, x = %d, y = %d\n", x, y);23 }� �

4. �1 [dywang@dyw219 zzz]$ gcc -o function6 function6.c� �

5. 式 average�1 [dywang@dyw219 zzz]$ ./function6

Enter TWO integers: 12 563 Before swap, x = 12, y = 56

After swap, x = 56, y = 12� �6. 式 increament 1�

[dywang@dyw219 zzz]$ vim function7.c2 [dywang@dyw219 zzz]$ cat function7.c

#include <stdio.h>4

int increament(void) {6 static int i=0;

8 return i++;}

10main() {

12 printf("i = %d\n", increament());printf("i = %d\n", increament());

14 printf("i = %d\n", increament());printf("i = %d\n", increament());

16 }� �7. �

[dywang@dyw219 zzz]$ gcc -o function7 function7.c� �8.

De-Yu Wang CSIE CYUT 109

Page 112: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.8. CHAPTER 13. 式

�1 [dywang@dyw219 zzz]$ ./function7

i = 03 i = 1

i = 25 i = 3� �

13.8

1. 式�1 void recursion() {

recursion();3 }

5 int main(){recursion();

7 }� �2. �

1 [dywang@dyw219 zzz]$ vim function8.c[dywang@dyw219 zzz]$ cat function8.c

3 #include <stdio.h>

5 int factorial(unsigned int i) {if(i <= 1) return 1;

7return i * factorial(i-1);

9 }int main() {

11 int i = 15;printf("Factorial of %d is %d\n", i, factorial(i));

13 return 0;}� �

3. �[dywang@dyw219 zzz]$ gcc -o function8 function8.c� �

4. �1 [dywang@dyw219 zzz]$ ./function8

Factorial of 15 is 2004310016

De-Yu Wang CSIE CYUT 110

Page 113: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.9. CHAPTER 13. 式

� �

13.9

1.

(a) zzz

(b) zzz

(c)

(d) main 式 0

2. C 語言程式

(a) 程式 func1.c scanf a b

i. a>b a, bii. a<=0 ( a ) 1iii. b<=0 ( b ) b>=20 20

sum 式 a b a bfunc1�

[dywang@dywmsi zzz]$ ./func12 Enter TWO integers: 6 12

6+...+12=634 [dywang@dywmsi zzz]$ ./func1

Enter TWO integers: 12 56 5+...+12=68

[dywang@dywmsi zzz]$ ./func18 Enter TWO integers: -3 45

1+...+20=21010 [dywang@dywmsi zzz]$ ./func1

Enter TWO integers: -2 -912 1+...+20=210

[dywang@dywmsi zzz]$ echo $?14 0� �

(b) func1.c 程式 func2.c 式 swap a, bswap a>b swap void func2

(c) 程式 func3.c 程式 ( )( ) 0 999999

3 ./func3 1 2 3 4 (2+4)/(1+3)=1.500func3 式 strlen, strcat,

strcpy 式

De-Yu Wang CSIE CYUT 111

Page 114: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

13.9. CHAPTER 13. 式

(d) 程式 func4.c 式 sum式 sum tyep int 2, 3, 4

0 func43�

./func4 1002 0/1=0.000

./func4 100 -22 334 111/3=27.750

./func4 100 -22 33 106 121/4=24.200

./func4 100 -22 33 10 208 0/5=0.000� �

(e) func4.c 程式 func5.c 式 sum voidtotal ( 0) func5

3. function8.c 式 程式 func6.c func6num num

stderr 0factorial 式 type

unsigned long unsigned long 20num>20 20 -(1) 1'-' B(2) 2 B�./func6 -3 > /dev/null

2 -(1), Not a Number!./func6 2B3 > /dev/null

4 B(2), Not a Number!./func6 6

6 Factorial of 6 is 720./func6 20

8 Factorial of 20 is 2432902008176640000./func6 30

10 Factorial of 20 is 2432902008176640000� �

De-Yu Wang CSIE CYUT 112

Page 115: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 14

14.1

1.

..

numbers[0]

.

numbers[1]

.

numbers[2]

.

numbers[3]

.

...

. Last Element.First Element

2. �type arrayName [ arraySize ];� �

3. �1 double balance[10];� �

4. �1 double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};� �

5. �1 double balance[] = {1000.0, 2.0, 3.4, 17.0, 50.0};� �

6.

..

1000.0

.

balance

.

2.0

.

3.4

.

17.0

.

50.0

.

0

.

1

.

2

.

3

.

4

113

Page 116: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.2. CHAPTER 14.

7. �1 [dywang@dyw219 zzz]$ vim array1.c

[dywang@dyw219 zzz]$ cat array1.c3 #include <stdio.h>

5 main() {int i, x, a[7];

7printf("Enter an integer: ");

9 scanf("%d", &x);for ( i=0; i<7; i++) {

11 a[i] = i + x;printf("a[%d] = %d\n", i, a[i]);

13 }}� �

8. �[dywang@dyw219 zzz]$ gcc -o array1 array1.c� �

9. �1 [dywang@dyw219 zzz]$ ./array1

Enter an integer: 53 a[0] = 5

a[1] = 65 a[2] = 7

a[3] = 87 a[4] = 9

a[5] = 109 a[6] = 11� �

14.2

1. �1 type name[size1][size2]...[sizeN];� �

2. �1 type arrayName [ x ][ y ];� �

De-Yu Wang CSIE CYUT 114

Page 117: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.2. CHAPTER 14.

3. 3x5

..

a[0][0]

.

a[0][1]

.

a[0][2]

.

a[0][3]

.

a[0][4]

.

a[1][0]

.

a[1][1]

.

a[1][2]

.

a[1][3]

.

a[1][4]

.

a[2][0]

.

a[2][1]

.

a[2][2]

.

a[2][3]

.

a[2][4]

.

Column 0

.

Column 1

.

Column 2

.

Column 3

.

Column 4

.

Row 0

.

Row 1

.

Row 2

4. 3x4 3�1 int a[3][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};� �

5. �1 [dywang@dyw219 zzz]$ vim array2.c

[dywang@dyw219 zzz]$ cat array2.c3 #include <stdio.h>

5 main() {int a[][4]={{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};

7 int i, j;

9 for ( i=0; i<3; i++ ) {for ( j=0; j<4; j++ ) {

11 printf("a[%d][%d] = %d\n", i,j, a[i][j] );}

13 }}� �

6. �[dywang@dyw219 zzz]$ gcc -o array2 array2.c� �

7. �1 [dywang@dyw219 zzz]$ ./array2

a[0][0] = 03 a[0][1] = 1

a[0][2] = 25 a[0][3] = 3

a[1][0] = 47 a[1][1] = 5

a[1][2] = 69 a[1][3] = 7

a[2][0] = 811 a[2][1] = 9

a[2][2] = 10

De-Yu Wang CSIE CYUT 115

Page 118: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.3. - CHAPTER 14.

13 a[2][3] = 11� �

14.3 -

1. null�1 char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};� �

2. 式�1 char str[] = "Hello";� �

3. �1 [dywang@dyw219 zzz]$ cat array3.c

#include <stdio.h>3

main () {5 char str1[6]={'H', 'e', 'l', 'l', 'o', '\0'};

char str2[]="Hello";7

printf("string1: %s\n", str1 );9 printf("string2: %s\n", str2 );

}� �4. �

[dywang@dyw219 zzz]$ gcc -o array3 array3.c� �5. �

1 [dywang@dyw219 zzz]$ ./array3string1: Hello

3 string2: Hello� �

De-Yu Wang CSIE CYUT 116

Page 119: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.4. 式 CHAPTER 14.

14.4 式

1. 式

(a) strcpy(s1, s2): s2 s1

(b) strcat(s1, s2): s2 s1

(c) strlen(s1): s1

(d) strcmp(s1, s2): s1 s2 s1 s20 s1<s2 0 s1>s2 0

(e) strchr(s1, ch): s1 ch

(f) strstr(s1, s2): s2 s1

2. �1 [dywang@dyw219 zzz]$ vim array4.c

[dywang@dyw219 zzz]$ cat array4.c3 #include <stdio.h>

#include <string.h>5

main () {7 char str1[11]="Hello", str2[11], str3[11];

9 printf("Enter a string: ");scanf("%s", str2);

11printf("str1 = %s\n", str1 );

13 printf("str2 = %s\n", str2 );strcpy(str3,str1);

15 printf("strcmp(str1,str3) = %d\n", strcmp(str1,str3) );printf("strcpy(str3,str1), str3 = %s\n", str3 );

17 printf("strcat(str3,str2) = %s\n", strcat(str3,str2) );printf("str3 = %s\n", str3 );

19 printf("strlen(str2) = %d\n", strlen(str2) );printf("strcmp(str1,str2) = %d\n", strcmp(str1,str2) );

21 printf("strchr(str1, 'e') = %d\n", strchr(str1, 'e') );printf("strstr(str1, str2) = %d\n", strstr(str1, str2) );

23 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o array4 array4.c� �4. str="- ABC" strlen(str2) str2 4 str-

cmp(str1,str2) 27 str2 str1 (ASCII ) strstr(str1,str2)0 str1 str2

De-Yu Wang CSIE CYUT 117

Page 120: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.5. 式 CHAPTER 14.

�1 [dywang@dyw219 zzz]$ ./array4

Enter a string: -ABC3 str1 = Hello

str2 = -ABC5 strcpy(str3,str1), str3 = Hello

strcmp(str1,str3) = 07 strcat(str3,str2) = Hello-ABC

str3 = Hello-ABC9 strlen(str2) = 4

strcmp(str1,str2) = 2711 strchr(str1, 'e') = 1641270433

strstr(str1, str2) = 0� �5. str="Hello" strlen(str2) str2 5 str-

cmp(str1,str2) 0 str2 str1 (ASCII ) strstr(str1,str2)935582496 str1 H strchr(str1,'e') 935582497

H �[dywang@dyw219 zzz]$ ./array4

2 Enter a string: Hellostr1 = Hello

4 str2 = Hellostrcpy(str3,str1), str3 = Hello

6 strcmp(str1,str3) = 0strcat(str3,str2) = HelloHello

8 str3 = HelloHellostrlen(str2) = 5

10 strcmp(str1,str2) = 0strchr(str1, 'e') = 935582497

12 strstr(str1, str2) = 935582496� �

14.5 式

1. call by reference 式 式式 式

(a) �void myFunction(int *param) {

2 ....}� �

(b) �1 void myFunction(int param[10]) {

De-Yu Wang CSIE CYUT 118

Page 121: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.5. 式 CHAPTER 14.

....3 }� �

(c) �1 void myFunction(int param[]) {

....3 }� �

2. size�1 [dywang@dyw219 zzz]$ vim array5.c

[dywang@dyw219 zzz]$ cat array5.c3 #include <stdio.h>

#include <stdarg.h>5

float average(int num[], int size) {7 float sum = 0.0;

int i;9 for ( i=0; i<size; i++) {

sum += num[i];11 }

13 return sum/size;}

15main() {

17 int num[]={5, 3, 4, 65, 11, 39};

19 printf("average(5,3,4,65,11,39)=%5.2f\n", average(num, 6));}� �

3. �[dywang@dyw219 zzz]$ gcc -o array5 array5.c� �

4. �1 [dywang@dyw219 zzz]$ ./array5

average(5,3,4,65,11,39)=21.17� �

De-Yu Wang CSIE CYUT 119

Page 122: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.6. CHAPTER 14.

14.6

1.

(a) zzz

(b) zzz

(c) array.txt

(d) array.txt

(e)

2. array.txt C 語言程式

(a) 程式 arr1.c int arr1[] sizeof arr1 A scanfnum num 2 2 10

10 arr1 index ( 0 A-1) num index numB 式 A=X<TAB>B=Y

arr1�./arr1

2 Enter an integer: -2A=49 B=1328

4 ./arr1Enter an integer: 4

6 A=49 B=14026./arr1

8 Enter an integer: 13A=49 B=23854� �

(b) 程式 arr2.c int arr2[][4] arr2[] A, B, C, D 4( char x) A, B, C, D

Only A B C D 程式 程式�1 if(x<65 || x>68 ) {

printf......;3 return 1;

}� �arr2 A, B, C, D

65 index 0, 1, 2, 3 if...else switch A,B,C,D0,1,2,3�

sum+=arr2[i][x-65];� �

De-Yu Wang CSIE CYUT 120

Page 123: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

14.6. CHAPTER 14.

�1 ./arr2

Enter a char: A3 A : 3267

./arr25 Enter a char: E

Only A B C D� �(c) 程式 arr3.c 10 str1 str2

10 程式 strcmp 式strcat 式 str1 str2

arr3�./arr3

2 String 1: 12345String 2: abcde

4 strcat=abcde12345./arr3

6 String 1: abcdeString 2: 12345

8 strcat=abcde12345./arr3

10 String 1: 12345qwertasdfgstrlen(12345qwertasdfg) = 15 > 10

12 ./arr3String 1: 12345

14 String 2: 12345strcat=12345

16 ./arr3String 1: 12345

18 String 2: qweasdzxcvbnstrlen(qweasdzxcvbn) = 12 > 10� �

(d) 程式 arr4.c 21 str121 程式

"Just a TEST!" "jUSTA test!" arr4 式toupper(char), tolower(char)�1 ./arr4

String 1: "Just a Test!"3 str1="Just a Test!", str2="jUST A tEST!"� �

(e) arr4.c 程式 arr5.c 式 void transform(char*str1, char *str2) str1 str2

arr5 arr4

De-Yu Wang CSIE CYUT 121

Page 124: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 15

15.1

1.&�

1 int var1;char var2[10];

3printf("Address of var1 variable: %x\n", &var1 );

5 printf("Address of var2 variable: %x\n", &var2 );� �2. (pointer) (type)

*

�1 type *var-name;� �

3. �1 int *ip;

double *dp;3 float *fp;

char *ch� �4. �

[dywang@dyw219 zzz]$ vim pointer1.c2 [dywang@dyw219 zzz]$ cat pointer1.c

#include <stdio.h>4

main () {6 int var=11;

122

Page 125: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.2. CHAPTER 15.

int *p;8

p = &var;10 printf( "var = %d\n", var );

printf( "&var = %x\n", &var );12 printf( "p = %x\n", p );

printf( "*p = %d\n", *p );14 }� �

5. �[dywang@dyw219 zzz]$ gcc -o pointer1 pointer1.c� �

6. �1 [dywang@dyw219 zzz]$ ./pointer1

var = 113 &var = 2a378bf4

p = 2a378bf45 *p = 11� �

15.2

1. (Null) 0 0�1 [dywang@dyw219 zzz]$ vim pointer2.c

[dywang@dyw219 zzz]$ cat pointer2.c3 #include <stdio.h>

5 main () {int *p=NULL;

7printf( "p = %x\n", p );

9 }� �2. �

1 [dywang@dyw219 zzz]$ gcc -o pointer2 pointer2.c� �3.

De-Yu Wang CSIE CYUT 123

Page 126: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.3. CHAPTER 15.

�1 [dywang@dyw219 zzz]$ ./pointer2

p = 0� �

15.3

1. ++, --, +, -�int *ptr, *p;

2 ptr++;ptr--;

4 p = ptr-1;p = ptr+1;� �

2. �1 [dywang@dyw219 zzz]$ vim pointer3.c

[dywang@dyw219 zzz]$ cat pointer3.c3 #include <stdio.h>

5 main () {int var[]={11, 22, 33, 44};

7 int i, *ptr;

9 ptr=var;for ( i=0; i<sizeof(var)/sizeof(int); i++, ptr++) {

11 printf( "var[%d]=%d\t&var[%d]=%x\n", i, var[i], i, &var[i]);printf( "*ptr=%d\t\tptr=%x\n", *ptr, ptr);

13 }}� �

3. �[dywang@dyw219 zzz]$ gcc -o pointer3 pointer3.c� �

4. �1 [dywang@dyw219 zzz]$ ./pointer3

[dywang@dyw219 zzz]$ ./pointer33 var[0]=11 &var[0]=e55f9d10

*ptr=11 ptr=e55f9d105 var[1]=22 &var[1]=e55f9d14

*ptr=22 ptr=e55f9d147 var[2]=33 &var[2]=e55f9d18

De-Yu Wang CSIE CYUT 124

Page 127: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.4. CHAPTER 15.

*ptr=33 ptr=e55f9d189 var[3]=44 &var[3]=e55f9d1c

*ptr=44 ptr=e55f9d1c� �

15.4

1. ++, --, +, -�� �2. �

[dywang@dyw219 zzz]$ vim pointer4.c2 [dywang@dyw219 zzz]$ cat pointer4.c

#include <stdio.h>4

main () {6 int var[]={11, 22, 33, 44};

int i=0, *ptr;8

ptr=var;10 while ( ptr <= &var[sizeof(var)/sizeof(int)-1]) {

printf( "var[%d]=%d\t&var[%d]=%x\n", i, var[i], i, &var[i]);12 printf( "*ptr=%d\t\tptr=%x\n", *ptr, ptr);

ptr++;14 i++;

}16 }� �

3. �[dywang@dyw219 zzz]$ gcc -o pointer4 pointer4.c� �

4. �1 [dywang@dyw219 zzz]$ ./pointer4

var[0]=11 &var[0]=8f3b1ea03 *ptr=11 ptr=8f3b1ea0

var[1]=22 &var[1]=8f3b1ea45 *ptr=22 ptr=8f3b1ea4

var[2]=33 &var[2]=8f3b1ea87 *ptr=33 ptr=8f3b1ea8

var[3]=44 &var[3]=8f3b1eac9 *ptr=44 ptr=8f3b1eac� �

De-Yu Wang CSIE CYUT 125

Page 128: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.5. CHAPTER 15.

15.5

1. �1 int *ptr[MAX];� �

2. �1 [dywang@dyw219 zzz]$ vim pointer5.c

[dywang@dyw219 zzz]$ cat pointer5.c3 #include <stdio.h>

5 main () {int var[]={11, 22, 33, 44};

7 int MAX=sizeof(var)/sizeof(int);int i, *ptr[MAX];

9for ( i=0; i<MAX; i++) {

11 ptr[i] = &var[i];printf( "*ptr[%d]=%d\t\tptr[%d]=%x\n", i, *ptr[i], i, ptr[i]);

13 }}� �

3. �[dywang@dyw219 zzz]$ gcc -o pointer5 pointer5.c� �

4. �1 [dywang@dyw219 zzz]$ ./pointer5

*ptr[0]=11 ptr[0]=8d1ef7803 *ptr[1]=22 ptr[1]=8d1ef784

*ptr[2]=33 ptr[2]=8d1ef7885 *ptr[3]=44 ptr[3]=8d1ef78c� �

5. �1 [dywang@dyw219 zzz]$ vim pointer6.c

[dywang@dyw219 zzz]$ cat pointer6.c3 #include <stdio.h>

5 main () {char *name[]={ "dywang", "linda", "peter", "rita" };

7 int MAX=sizeof(name)/sizeof(*name);int i;

De-Yu Wang CSIE CYUT 126

Page 129: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.6. CHAPTER 15.

9for ( i=0; i<MAX; i++)

11 printf( "name[%d]=%s\n", i, name[i]);}� �

6. �[dywang@dyw219 zzz]$ gcc -o pointer6 pointer6.c� �

7. �1 [dywang@dyw219 zzz]$ ./pointer6

name[0]=dywang3 name[1]=linda

name[2]=peter5 name[3]=rita� �

15.6

1.(pointer to pointer)�1 int var;

int *ptr;3 int **pptr;� �

..address ofvar pointer

. varaddress

. var value.

**pptr

.

*ptr

.

var

2. �1 [dywang@dyw219 zzz]$ vim pointer7.c

[dywang@dyw219 zzz]$ cat pointer7.c3 #include <stdio.h>

5 main () {int var=1234;

7 int *ptr;int **pptr;

9ptr = &var;

11 pptr= &ptr;

De-Yu Wang CSIE CYUT 127

Page 130: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.7. 式 CHAPTER 15.

13 printf( "var=%d\n*ptr=%d\n**pptr=%d\n", var, *ptr, **pptr);}� �

3. �[dywang@dyw219 zzz]$ gcc -o pointer7 pointer7.c� �

4. �1 [dywang@dyw219 zzz]$ ./pointer7

var=12343 *ptr=1234

**pptr=1234� �

15.7 式

1. unsigned long sec 式 getSeconds sec式 time 1970 1 1 0 0 0

Unix ( ) POSIX�[dywang@dyw219 zzz]$ vim pointer8.c

2 [dywang@dyw219 zzz]$ cat pointer8.c#include <stdio.h>

4 #include <time.h>

6 void getSeconds(unsigned long *par) {*par = time( NULL );

8 return;}

10main () {

12 unsigned long sec;

14 getSeconds( &sec );

16 printf("Number of seconds: %ld\n", sec );}� �

2. �1 [dywang@dyw219 zzz]$ gcc -o pointer8 pointer8.c� �

De-Yu Wang CSIE CYUT 128

Page 131: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.8. 式 CHAPTER 15.

3. 1970 1 1 0 0 0�1 [dywang@dyw219 zzz]$ ./pointer8

Number of seconds: 1563269570� �4. date +%s�

[dywang@dyw219 zzz]$ date +%s2 1563269576� �

15.8 式

1. 式 式�[dywang@dyw219 zzz]$ vim pointer9.c

2 [dywang@dyw219 zzz]$ cat pointer9.c#include <stdio.h>

4float getAverage(int *arr, int size)

6 {int i, sum=0;

8 float avg;

10 for ( i=0; i<size; ++i) {sum += arr[i];

12 }avg = (float)sum/size;

14 return avg;}

16main () {

18 int balance[] = {1000, 2, 3, 17, 50};float avg;

20avg = getAverage( balance, 5 ) ;

22 printf("Average(1000, 2, 3, 17, 50) = %f\n", avg );}� �

2. �1 [dywang@dyw219 zzz]$ gcc -o pointer9 pointer9.c� �

3.

De-Yu Wang CSIE CYUT 129

Page 132: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.9. 式 CHAPTER 15.

�1 [dywang@dyw219 zzz]$ ./pointer9

Average(1000, 2, 3, 17, 50) = 214.399994� �

15.9 式

1. C 語言 式式 式�

int * myFunction() {2 ....

}� �2. age[10]

10 arg&age[0] pointer p�1 int *p;

int age[10];3

p = age;� �3. getRandom 式 6 r r

�[dywang@dyw219 zzz]$ vim pointer10.c

2 [dywang@dyw219 zzz]$ cat pointer10.c#include <stdio.h>

4int * getRandom() {

6 static int r[6];int i;

8srand( (unsigned)time(NULL) );

10 for ( i=0; i<6; ++i ) {r[i] = rand();

12 printf( "r[%d] = %d\n", i, r[i]);}

14 return r;}

16main () {

18 int *p;int i;

20p = getRandom();

De-Yu Wang CSIE CYUT 130

Page 133: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.10. CHAPTER 15.

22 for ( i=0; i<6; i++ ) {printf( "*(p+%d) : %d\n", i, *(p+i) );

24 }}� �

4. �1 [dywang@dyw219 zzz]$ gcc -o pointer10 pointer10.c� �

5. getRandom�1 [dywang@dyw219 zzz]$ ./pointer10

r[0] = 1261167173 r[1] = 1369586395

r[2] = 7943048075 r[3] = 586010293

r[4] = 2405856517 r[5] = 20839561

*(p+0) : 1261167179 *(p+1) : 1369586395

*(p+2) : 79430480711 *(p+3) : 586010293

*(p+4) : 24058565113 *(p+5) : 20839561� �

15.10

1.

(a) zzz

(b) zzz

(c) array.txt

(d)

2. array.txt C 語言程式

(a) 程式 point1.c int arr3[] ptr arr3 do...whilex arr3

ptr ptr+n <TAB>point1�

1 ./point1Enter an integer: -2

3 Enter an integer: 10000

De-Yu Wang CSIE CYUT 131

Page 134: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.10. CHAPTER 15.

Enter an integer: 195 ptr=-767412528 *ptr=186 ptr+19=-767412452 *(ptr+19)=503� �

(b) 程式 point2.c int arr8[] ptr arr8 do...whilex arr3

for x'-' ptr

point2�1 ./point2

Enter an integer: -23 Enter an integer: 19

Enter an integer: 35 String:-2--N--I--i--E-� �

(c) 程式 point3.c arr11 *name do...whilex *name

for 1 x":" point3�

1 ./point3Enter an integer: -3

3 Enter an integer: 10Enter an integer: 3

5 Name:ALLEN:COLIN:DAVID� �(d) 程式 point4.c x ptr x

pptr ptr<TAB> point4

�1 ./point4

Enter an integer: 123 x=12 *ptr=12 **pptr=12� �

(e) 程式 point5.c int arr4[] do...while xarr4 式 ovdiff

-x x ovdiff <TAB>point5�

1 ./point5Enter an integer: -2

3 Enter an integer: 123Enter an integer: 10

De-Yu Wang CSIE CYUT 132

Page 135: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

15.10. CHAPTER 15.

5 x=10 ovdiff=4396� �(f) 程式 point6.c x x>5 5 式 getSec

x x Unix secs ( static) secs程式 main secs point6

x=3�1 ./point6

Enter an integer: 93 sec0=1564977690

sec1=15649776905 sec2=1564977690

sec3=15649776907 sec4=1564977690

./point69 Enter an integer: 3

sec0=156497769511 sec1=1564977695

sec2=1564977695� �

De-Yu Wang CSIE CYUT 133

Page 136: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 16

16.1 式

1. 程式 程式

式void *calloc(int num, int size);num size bytesvoid free(void *address); addressvoid *malloc(int num); num

sizevoid *realloc(void *address, int newsize); newsize

16.2

1. char malloc 式

�[dywang@dyw219 zzz]$ vim malloc1.c

2 [dywang@dyw219 zzz]$ cat malloc1.c#include <stdio.h>

4 #include <stdlib.h>#include <string.h>

6int main() {

8 char name[20];char *description;

10strcpy(name, "De-Yu Wang");

12description = malloc( 10 * sizeof(char) );

14 if( description == NULL ) {fprintf(stderr, "Error - unable to allocate required memory\n");

16 return 1;} else {

18 strcpy( description, "CSIE CYUT");}

20 printf("Name: %s\n", name );

134

Page 137: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

16.3. CHAPTER 16.

printf("Description: %s\n", description );22 return 0;

}� �2. �

1 [dywang@dyw219 zzz]$ gcc -o malloc1 malloc1.c� �3. �

1 [dywang@dyw219 zzz]$ ./malloc1Name: De-Yu Wang

3 Description: CSIE CYUT� �

16.3

1. 式 realloc() 式 free()�1 [dywang@dyw219 zzz]$ vim malloc2.c

[dywang@dyw219 zzz]$ cat malloc2.c3 #include <stdio.h>

#include <stdlib.h>5 #include <string.h>

7 int main() {char name[20];

9 char *description;

11 strcpy(name, "De-Yu Wang");

13 description = malloc( 10 * sizeof(char) );if( description == NULL ) {

15 fprintf(stderr, "Error - unable to allocate required memory\n");return 1;

17 } else {strcpy( description, "CSIE CYUT");

19 }description = malloc( 100 * sizeof(char) );

21 if( description == NULL ) {fprintf(stderr, "Error - unable to allocate required memory\n");

23 return 1;} else {

25 strcpy( description, "ChaoYang University of Technology");}

27 printf("Name = %s\n", name );printf("Description: %s\n", description );

De-Yu Wang CSIE CYUT 135

Page 138: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

16.4. CHAPTER 16.

29 free(description);

31 return 0;}� �

2. �[dywang@dyw219 zzz]$ gcc -o malloc2 malloc2.c� �

3. �1 [dywang@dyw219 zzz]$ ./malloc2

Name = De-Yu Wang3 Description: ChaoYang University of Technology� �

16.4

1.

(a) zzz(b) zzz(c)

2. C 語言程式

(a) 程式 mem1a.c name desc char程式

mema1�1 ./mema1 "De-Yu Wang" "CSIE CYUT"

Name: De-Yu Wang3 Desc: CSIE CYUT� �

(b) mema1.c 程式 mem2a.c for ( )程式

mema1�1 ./mema2 "Wang" "CSIE" "De-Yu Wang" "CSIE CYUT"

Name: Wang3 Desc: CSIE

Name: De-Yu Wang5 Desc: CSIE CYUT� �

De-Yu Wang CSIE CYUT 136

Page 139: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 17

17.1 言

1.

2. C 語言 式

3. 程式

4.

5. 式 stdio.h

17.2

1. 語�1 FILE *fopen( const char * filename, const char * mode );� �

2. mode 式

moderw

a

r+w+

a+

3. mode (binary) b

137

Page 140: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.3. CHAPTER 17.

�1 "rb", "wb", "ab", "ab+", "a+b", "wb+", "w+b", "ab+", "a+b"� �

4. 語�1 int fclose( FILE *fp );� �

17.3

1. �1 [dywang@dyw219 zzz]$ vim fileio1.c

[dywang@dyw219 zzz]$ cat fileio1.c3 #include <stdio.h>

5 int main( int argc, char *argv[] ) {FILE *fp;

7fp = fopen( argv[1], "r" );

9 if( fp != NULL) {printf("File %s exist.\n", argv[1]);

11 }else {

13 printf("File %s does not exist.\n", argv[1]);}

15 fclose(fp);

17 return 0;}� �

2. �[dywang@dyw219 zzz]$ gcc -o fileio1 fileio1.c� �

3. fileio.txt fileio.aaa

�1 [dywang@dyw219 zzz]$ ./fileio1 fileio.txt

File fileio.txt exist.3 [dywang@dyw219 zzz]$ ./fileio1 fileio.aaa

File fileio.aaa does not exist.� �

De-Yu Wang CSIE CYUT 138

Page 141: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.4. CHAPTER 17.

17.4

1. 式

(a) 語�int fputc( char ch, FILE *fp );� �

(b) 語�1 int fputs( const char *s, FILE *fp );� �

(c) 式 語 format printf�1 int fprintf(FILE *stream, const char *format, ...)� �

2. �1 [dywang@dyw219 zzz]$ vim fileio2.c

[dywang@dyw219 zzz]$ cat fileio2.c3 #include <stdio.h>

5 int main( int argc, char *argv[] ) {FILE *fp;

7 char ch='A';

9 fp = fopen( argv[1], "w" );if( fp != NULL) {

11 fputc( ch, fp);fputs( "--B\n", fp);

13 fprintf( fp, "%s %s %d\n", "str1", "str2", 2019);}

15 else {printf("File %s does not exist.\n", argv[1]);

17 }fclose(fp);

19return 0;

21 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o fileio2 fileio2.c� �

De-Yu Wang CSIE CYUT 139

Page 142: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.5. CHAPTER 17.

4. fileio2 fio2test�1 [dywang@dyw219 zzz]$ ./fileio2 fio2test� �

5. fio2test�1 [dywang@dyw219 zzz]$ cat fio2test

A--B3 str1 str2 2019� �

17.5

1. 式

(a) 語�1 int fgetc( FILE * fp );� �

(b) 語�1 char *fgets( char *buf, int n, FILE *fp );� �

(c) 式 語 format 式 printf 式�1 int fscanf(FILE *stream, const char *format, ...)� �

2. fileio2.c 式�1 [dywang@dyw219 zzz]$ vim fileio3.c

[dywang@dyw219 zzz]$ cat fileio3.c3 #include <stdio.h>

5 int main( int argc, char *argv[] ) {FILE *fp;

7 char ch, buff1[10], buff2[10], buff3[10];int i;

9fp = fopen( argv[1], "r" );

11 if( fp != NULL) {ch = fgetc(fp);

13 fgets(buff1, 4, fp);fscanf(fp, "%s %s %d", buff2, buff3, &i );

De-Yu Wang CSIE CYUT 140

Page 143: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.6. CHAPTER 17.

15 printf("%c%s\n%s %s %d\n", ch, buff1, buff2, buff3, i);}

17 else {printf("File %s does not exist.\n", argv[1]);

19 }fclose(fp);

21return 0;

23 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o fileio3 fileio3.c� �4. fileio3 fio2test

式 �1 [dywang@dyw219 zzz]$ ./fileio3 fio2test

A--B3 str1 str2 2019� �

5. C 語言程式

3 12 34 6 7Ans=5,62

17.6

1. 式

(a) size_of_elements number_of_elements

�1 size_t fread(void *ptr, size_t size_of_elements,

size_t number_of_elements, FILE *a_file);� �(b) size_of_elements number_of_elements

�size_t fwrite(const void *ptr, size_t size_of_elements,

2 size_t number_of_elements, FILE *a_file);� �

De-Yu Wang CSIE CYUT 141

Page 144: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.7. FSEEK 式 CHAPTER 17.

2. fread 0 ( )fwrite�

[dywang@dyw219 zzz]$ vim fileio4.c2 [dywang@dyw219 zzz]$ cat fileio4.c

#include <stdio.h>4

int main( int argc, char *argv[] ) {6 FILE *fp1, *fp2;

char ch;8

fp1 = fopen( argv[1], "rb" );10 fp2 = fopen( argv[2], "wb" );

if( fp1 != NULL) {12 while ( fread( &ch, sizeof(ch), 1, fp1) != 0 )

fwrite( &ch, sizeof(ch), 1, fp2 );14 }

else {16 printf("File %s does not exist.\n", argv[1]);

}18 fclose(fp1);

fclose(fp2);20

return 0;22 }� �

3. �[dywang@dyw219 zzz]$ gcc -o fileio4 fileio4.c� �

4. 式 fileio1 fileio1.bak�1 [dywang@dyw219 zzz]$ ./fileio4 fileio1 fileio1.bak� �

5. diff fileio1 fileio1.bak�1 [dywang@dyw219 zzz]$ diff fileio1 fileio1.bak� �

17.7 fseek 式

1. fseek 式

(a) 語 formwhere offset

De-Yu Wang CSIE CYUT 142

Page 145: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.7. FSEEK 式 CHAPTER 17.

�1 int fseek(FILE *stream, long offset, int fromwhere);� �

(b) SEEK

i. SEEK_SETii. SEEK_CURiii. SEEK_END

2. fread 0 ( )fwrite�1 [dywang@dyw219 zzz]$ vim fileio5.c

[dywang@dyw219 zzz]$ cat fileio5.c3 #include <stdio.h>

5 int main( int argc, char *argv[] ) {FILE *fp1;

7 char ch;

9 fp1 = fopen( argv[1], "r" );if( fp1 != NULL) {

11 while( (ch=fgetc(fp1)) != EOF )printf("%c", ch);

13 fseek(fp1, 2, SEEK_SET);while( (ch=fgetc(fp1)) != EOF )

15 printf("%c", ch);}

17 else {printf("File %s does not exist.\n", argv[1]);

19 }fclose(fp1);

21return 0;

23 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o fileio5 fileio5.c� �4. fio5test�

1 [dywang@dyw219 zzz]$ echo 'abc 123' > fio5test[dywang@dyw219 zzz]$ cat fio5test

3 abc 123� �

De-Yu Wang CSIE CYUT 143

Page 146: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

17.8. CHAPTER 17.

5. 2

�1 [dywang@dyw219 zzz]$ ./fileio5 fio5test

abc 1233 c 123� �

17.8

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

(a) 程式 fio1.c 式":"

fio1�1 cat a.txt

UjsAbc dsdef Gshi Asdsdf 1sdsa23 Fdsdty3 ./fio1 a.txt

UjsAbc:Gshi:Asdsdf:Fdsdty:� �(b) fio1.c 程式 fio2.c

fio2

(c) 程式 fio3.c 式 1.2. 3. 4.

式 1fio3

1

De-Yu Wang CSIE CYUT 144

Page 147: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 18

18.1 言

1. (structure)

�struct Books {

2 char title[50];char author[50];

4 int book_id;}� �

2. (union) structunion

unionchar, int, long 1, 4, 8 union_name 8

�1 union union_name {

char ch;3 int num1;

long num2;5 }� �

18.2

1. 語�1 struct [structure tag] {

member definition;3 member definition;

...5 member definition;

145

Page 148: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.2. CHAPTER 18.

} [one or more structure variables];� �2. structure structure (book)

�struct Books {

2 char title[50];char author[50];

4 int book_id;} book;� �

3. �1 [dywang@dyw219 zzz]$ vim struct1.c

[dywang@dyw219 zzz]$ cat struct1.c3 #include <stdio.h>

#include <string.h>5

struct Books {7 char title[50];

char author[50];9 int book_id;

};11

int main () {13 struct Books book1;

struct Books book2;15

strcpy( book1.title, "RHCSA");17 strcpy( book1.author, "dywang");

book1.book_id = 123456;19

strcpy( book2.title, "Python");21 strcpy( book2.author, "Linda");

book2.book_id = 123321;23

printf( "book1.title : %s\n", book1.title);25 printf( "book1.author : %s\n", book1.author);

printf( "book1.book_id : %d\n", book1.book_id);27

printf( "book2.title : %s\n", book2.title);29 printf( "book2.author : %s\n", book2.author);

printf( "book2.book_id : %d\n", book2.book_id);31

return 0;33 }� �

4.

De-Yu Wang CSIE CYUT 146

Page 149: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.3. 式 CHAPTER 18.

�1 [dywang@dyw219 zzz]$ gcc -o struct1 struct1.c� �

5. �1 [dywang@dyw219 zzz]$ ./struct1

book1.title : RHCSA3 book1.author : dywang

book1.book_id : 1234565 book2.title : Python

book2.author : Linda7 book2.book_id : 123321� �

18.3 式

1. struct Books title, author, book_id 式 print-Book�1 [dywang@dyw219 zzz]$ cat struct2.c

#include <stdio.h>3 #include <string.h>

5 struct Books {char title[50];

7 char author[50];int book_id;

9 };

11 void printBook( struct Books book ) {printf( "book.title : %s\n", book.title);

13 printf( "book.author : %s\n", book.author);printf( "book.book_id : %d\n", book.book_id);

15 book.book_id = 999999;}

17int main () {

19 struct Books book1;struct Books book2;

21strcpy( book1.title, "RHCSA");

23 strcpy( book1.author, "dywang");book1.book_id = 123456;

25strcpy( book2.title, "Python");

27 strcpy( book2.author, "Linda");book2.book_id = 123321;

29printBook( book1 );

31 printf( "book1_id : %d\n", book1.book_id);

De-Yu Wang CSIE CYUT 147

Page 150: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.4. 式 CHAPTER 18.

printBook( book2 );33 printf( "book2_id : %d\n", book2.book_id);

35 return 0;}� �

2. �[dywang@dyw219 zzz]$ gcc -o struct2 struct2.c� �

3. 式 printBook struct 式 printBookbook_id=999999 式 bbok1.book_id 123456

book2.book_id 123321�1 book.title : RHCSA

book.author : dywang3 book.book_id : 123456

book1_id : 1234565 book.title : Python

book.author : Linda7 book.book_id : 123321

book2_id : 123321� �

18.4 式

1.

(a) �struct Books *struct_pointer;� �

(b) �1 struct_pointer = &Book1;� �

(c) �1 struct_pointer->title;� �

2.

De-Yu Wang CSIE CYUT 148

Page 151: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.4. 式 CHAPTER 18.

�1 [dywang@dyw219 zzz]$ vim struct3.c

[dywang@dyw219 zzz]$ cat struct3.c3 #include <stdio.h>

#include <string.h>5

struct Books {7 char title[50];

char author[50];9 int book_id;

};11

void printBook( struct Books *book ) {13 printf( "book.title : %s\n", book->title);

printf( "book.author : %s\n", book->author);15 printf( "book.book_id : %d\n", book->book_id);

book->book_id = 999999;17 }

19 int main () {struct Books book1;

21 struct Books book2;

23 strcpy( book1.title, "RHCSA");strcpy( book1.author, "dywang");

25 book1.book_id = 123456;

27 strcpy( book2.title, "Python");strcpy( book2.author, "Linda");

29 book2.book_id = 123321;

31 printBook( &book1 );printf( "book1_id : %d\n", book1.book_id);

33 printBook( &book2 );printf( "book2_id : %d\n", book2.book_id);

35return 0;

37 }� �3. �

1 [dywang@dyw219 zzz]$ gcc -o struct3 struct3.c� �4. 式 printBook struct 式 printBook

book_id=999999 式 bbok1.book_id 99999book2.book_id 999999�1 [dywang@dyw219 zzz]$ ./struct3

book.title : RHCSA3 book.author : dywang

book.book_id : 123456

De-Yu Wang CSIE CYUT 149

Page 152: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.5. BIT FILEDS CHAPTER 18.

5 book1_id : 999999book.title : Python

7 book.author : Lindabook.book_id : 123321

9 book2_id : 999999� �

18.5 Bit Fileds

1. Bit Fields structure 語�1 struct {

type [member_name] : width ;3 };� �

2. bit-field

(a) cannot take address of bit-field fscanf, printf

(b)

(c) sizeof

3. age 3 0 7�1 struct {

unsigned int age : 3;3 } Age;� �

4. age=8 3�1 [dywang@dyw219 zzz]$ vim struct4.c

[dywang@dyw219 zzz]$ cat struct4.c3 #include <stdio.h>

#include <string.h>5

struct {7 unsigned int age : 3;

} Age;9

int main () {11 Age.age = 4;

printf( "Sizeof( Age ) : %d\n", sizeof(Age) );13 printf( "Age.age : %d\n", Age.age );

15 Age.age = 7;printf( "Age.age : %d\n", Age.age );

17

De-Yu Wang CSIE CYUT 150

Page 153: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.6. UNION CHAPTER 18.

Age.age = 8;19 printf( "Age.age : %d\n", Age.age );

21 return 0;}� �

5. Age.age=8 4�[dywang@dyw219 zzz]$ gcc -o struct4 struct4.c

2 struct4.c: In function main:struct4.c:16:2: warning: large integer implicitly truncated to unsigned

type [-Woverflow]4 Age.age = 8;

^� �6. main 式�

1 [dywang@dyw219 zzz]$ gcc -o struct4 struct4.c� �7. struct Age int 4 (32 ) 3

age�1 [dywang@dyw219 zzz]$ ./struct4

Sizeof( Age ) : 43 Age.age : 4

Age.age : 7� �

18.6 Union

1. Unionunion�

union [union tag] {2 member definition;

member definition;4 ...

member definition;6 } [one or more union variables];� �

2.

De-Yu Wang CSIE CYUT 151

Page 154: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.7. UNION CHAPTER 18.

�union Data {

2 int i;float f;

4 char str[20];} data;� �

3. �1 [dywang@dyw219 zzz]$ vim union1.c

[dywang@dyw219 zzz]$ cat union1.c3 #include <stdio.h>

5 union Data {int i;

7 float f;char str[20];

9 };

11 int main () {union Data data;

13printf( "sizeof(data) = %d\n", sizeof(data));

15return 0;

17 }� �4. �

1 [dywang@dyw219 zzz]$ gcc -o union1 union1.c� �5. int, float 4 char str[20] 20

union data 20�1 [dywang@dyw219 zzz]$ ./union1

sizeof(data) = 20� �

18.7 Union

1. union�[dywang@dyw219 zzz]$ vim union2.c

2 [dywang@dyw219 zzz]$ cat union2.c#include <stdio.h>

De-Yu Wang CSIE CYUT 152

Page 155: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.7. UNION CHAPTER 18.

4 #include <string.h>

6 union Data {int i;

8 float f;char str[20];

10 };

12 int main () {union Data data;

14 data.i = 10;data.f = 220.5;

16 strcpy( data.str, "C Programming");

18 printf( "data.i : %d\n", data.i);printf( "data.f : %f\n", data.f);

20 printf( "data.str : %s\n", data.str);

22 return 0;}� �

2. �1 [dywang@dyw219 zzz]$ gcc -o union2 union2.c� �

3. i=10, f=220.5, str="C Programming" str�1 data.i : 1917853763

data.f : 4122360580327794860452759994368.0000003 data.str : C Programming� �

4. union�1 [dywang@dyw219 zzz]$ vim union3.c

[dywang@dyw219 zzz]$ cat union3.c3 #include <stdio.h>

#include <string.h>5

union Data {7 int i;

float f;9 char str[20];

};11

int main () {13 union Data data;

15 data.i = 10;

De-Yu Wang CSIE CYUT 153

Page 156: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.8. CHAPTER 18.

printf( "data.i : %d\n", data.i);17

data.f = 220.5;19 printf( "data.f : %f\n", data.f);

21 strcpy( data.str, "C Programming");printf( "data.str : %s\n", data.str);

23return 0;

25 }� �5. �

1 [dywang@dyw219 zzz]$ gcc -o union3 union3.c� �6. �

1 [dywang@dyw219 zzz]$ ./union3data.i : 10

3 data.f : 220.500000data.str : C Programming� �

18.8

1.

(a) zzz

(b) zzz

(c)

2. grade.txt C 語言程式

(a) 程式 strunion1.c structure student char name[20], unsignedint sid, unsigned short score

... NOT exists. 0student grade.txt

struct <TAB>strunion1�

./strunion1 ggg.txt2 ggg.txt NOT exist.

./strunion1 grade.txt4 sid=27010 name=Alisa score=91

sid=27021 name=Brook score=35

De-Yu Wang CSIE CYUT 154

Page 157: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

18.8. CHAPTER 18.

6 sid=27091 name=Crystal score=76sid=27102 name=Jenny score=60� �

(b) strunion1.c 程式 strunion2.c struct式 printgrade 式 printgradestrunion2

(c) strunion2.c 程式 strunion3.c struct式 printgrade 式 printgradestrunion3

(d) strunion3.c 程式 strunion4.c score 6 score64 strunion4 grade.txt

score 6464�

1 ./strunion4 grade.txtsid=27010 name=Alisa score=27

3 sid=27021 name=Brook score=35sid=27091 name=Crystal score=12

5 sid=27102 name=Jenny score=60� �(e) strunion1.c 程式 strunion5.c student structure union

char name[13] union studentstrunion5 union

score union student scorename�

1 ./strunion5 grade.txtsid=91 name=[ score=91

3 sid=35 name=# score=35sid=76 name=L score=76

5 sid=60 name=< score=60sizeof(student)=16� �

De-Yu Wang CSIE CYUT 155

Page 158: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 19

C

19.1

1. C (Preprocessor)

2. (#)

#define#include .h#undef#ifdef true#ifndef true#if if#else if#elif if#endif#error stderr#pragma compiler

; compiler

3. #define CPP MAX_ARRAY_LENGTH 20�#define MAX_ARRAY_LENGTH 20� �

4. #include CPP 式 stdio.h myheader.h

�1 #include <stdio.h>

#include "myheader.h"� �

156

Page 159: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.2. CHAPTER 19. C

19.2

1. ANSI

__DATE__ 式"MMM DD YYYY"__TIME__ 式"HH:MM:SS"__FILE____LINE____STDC__ ANSI 1

2. �[dywang@dyw219 zzz]$ vim preprocess1.c

2 [dywang@dyw219 zzz]$ cat preprocess1.c#include <stdio.h>

4main() {

6 printf("File :%s\n", __FILE__ );printf("Date :%s\n", __DATE__ );

8 printf("Time :%s\n", __TIME__ );printf("Line :%d\n", __LINE__ );

10 printf("ANSI :%d\n", __STDC__ );}� �

3. �1 [dywang@dyw219 zzz]$ gcc -o preprocess1 preprocess1.c� �

4. �1 [dywang@dyw219 zzz]$ ./preprocess1

File :preprocess1.c3 Date :Jul 27 2019

Time :10:08:405 Line :7

ANSI :1� �

19.3

1. Macro Continuation (\)�#define message_for(a, b) \

2 printf(#a " and " #b ": We love you!\n")

De-Yu Wang CSIE CYUT 157

Page 160: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.3. CHAPTER 19. C

� �2. Stringize (#)

(a) �[dywang@dyw219 zzz]$ vim preprocess2.c

2 [dywang@dyw219 zzz]$ cat preprocess2.c#include <stdio.h>

4#define message_for(a, b) \

6 printf(#a " and " #b ": We love you!\n")

8 int main(void) {message_for(Carole, Debra);

10 return 0;}� �

(b) �1 [dywang@dyw219 zzz]$ gcc -o preprocess2 preprocess2.c� �

(c) �1 [dywang@dyw219 zzz]$ ./preprocess2

Carole and Debra: We love you!� �3. Token Pasting (##)

(a) �[dywang@dyw219 zzz]$ vim preprocess3.c

2 [dywang@dyw219 zzz]$ cat preprocess3.c#include <stdio.h>

4#define tokenpaster(n) printf ("token" #n " = %d\n", token##n)

6int main(void) {

8 int token34 = 40;

10 tokenpaster(34);return 0;

12 }� �(b)

De-Yu Wang CSIE CYUT 158

Page 161: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.4. CHAPTER 19. C

�[dywang@dyw219 zzz]$ gcc -o preprocess3 preprocess3.c� �

(c) �1 [dywang@dyw219 zzz]$ ./preprocess3

token34 = 40� �4. defined() 式

(a) �[dywang@dyw219 zzz]$ vim preprocess4.c

2 [dywang@dyw219 zzz]$ cat preprocess4.c#include <stdio.h>

4#if !defined (MESSAGE)

6 #define MESSAGE "You wish!"#endif

8int main(void) {

10 printf("Here is the message: %s\n", MESSAGE);return 0;

12 }� �(b) �

[dywang@dyw219 zzz]$ gcc -o preprocess4 preprocess4.c� �(c) �

1 [dywang@dyw219 zzz]$ ./preprocess4Here is the message: You wish!� �

19.4

1. 式 式�int square(int x) {

2 return x * x;}� �

De-Yu Wang CSIE CYUT 159

Page 162: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.5. .H CHAPTER 19. C

2. �1 #define square(x) ((x) * (x))� �

3. �1 [dywang@dyw219 zzz]$ vim preprocess5.c

[dywang@dyw219 zzz]$ cat preprocess5.c3 #include <stdio.h>

5 #define MAX(x,y) ((x) > (y) ? (x) : (y))

7 int main(void) {printf("Max between 20 and 10 is %d\n", MAX(10, 20));

9 return 0;}� �

4. �[dywang@dyw219 zzz]$ gcc -o preprocess5 preprocess5.c� �

5. �1 [dywang@dyw219 zzz]$ ./preprocess5

Max between 20 and 10 is 20� �

19.5 .h

1. Include 語 .h 式�#include <file.h>� �

2. Include 語 .h 程式�1 #include "file.h"� �

3.

(a) square.h

De-Yu Wang CSIE CYUT 160

Page 163: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.6. CHAPTER 19. C

�1 [dywang@dyw219 zzz]$ vim square.h

[dywang@dyw219 zzz]$ cat square.h3 int square(int);� �

(b) 程式 square.c 式 square�1 [dywang@dyw219 zzz]$ cat square.c

int square(int x) {3 return x * x;

}� �(c) 程式 square.h include 程式�

[dywang@dyw219 zzz]$ vim preprocess6.c2 [dywang@dyw219 zzz]$ cat preprocess6.c

#include <stdio.h>4 #include "square.h"

6 int main (void){int x=3;

8 printf("square %d = %d\n", x,square(x));}� �

(d) square.c�1 [dywang@dyw219 zzz]$ gcc -o preprocess6 preprocess6.c square.c� �

(e) �1 [dywang@dyw219 zzz]$ ./preprocess6

square 3 = 9� �

19.6

1.

(a) zzz

(b) zzz

(c)

2. C 語言程式

De-Yu Wang CSIE CYUT 161

Page 164: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.6. CHAPTER 19. C

(a) 程式 prepro1.c happy_for(name) stringize #name 5 name Mother 8

Father __DATA__Aug 9 2019 5 8 Only 5 8

prepro1�./prepro1 5 8 3

2 Happy Mother's Day! Aug 9 2019Happy Father's Day! Aug 9 2019

4 Only 5 8� �(b) 程式 prepro2.c tokenpast(N) token pasting ##

token n int token1=10, token2=11, token3=21tokenpast(N) tokenN * 2 = xx N

1, 2, 3 only 1 2 3__DATA__

prepro2�./prepro2 1 2 3 5

2 token1 * 2 = 20 (Aug 9 2019)token2 * 2 = 22 (Aug 9 2019)

4 token3 * 2 = 42 (Aug 9 2019)Only 1 2 3� �

(c) 程式 prepro3.c MIN(x,y) x, y

__DATA__x or y NOT a number! 0

prepro3�1 ./prepro3 11 22

MIN between 11 and 22 is 11 (Aug 9 2019)3 ./prepro3 11 a

11 or a NOT a number!� �(d) 程式

i. swap.h�void swap(int *x, int *y);� �

ii. 程式 swap.c 式 swap(*x, *y) x, yiii. 程式 prepro4.c swap.h include 程式 call for reference 式

swap x + y*2 x, y

De-Yu Wang CSIE CYUT 162

Page 165: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

19.6. CHAPTER 19. C

__DATA__x or y NOT a number! 0

prepro4�1 ./prepro4 2 5

After swap, 5 + 2*2 = 9 (Aug 9 2019)3 ./prepro4 2 b

2 or b NOT a number!� �

De-Yu Wang CSIE CYUT 163

Page 166: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 20

gdb

20.1 gdb

1. gdb FSF (Free Software Foundation)

2. GNU gdb

3. gdb GUI

20.2 gdb

1. gdb�[root@dyH ~]# yum install gdb� �

2. vim 程式 gdbtest1.c�1 int main()

{3 int a, b, c;

a=5;5 b=10;

b+=a;7 c=b+a;

return 0;9 }� �

3. 程式�1 [dywang@dyH gcc]$ gcc -Wall -g -o gdbtest1 gdbtest1.c� �

4. gdb l

164

Page 167: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.2. GDB CHAPTER 20. GDB

�1 [dywang@dyH gcc]$ gdb -q gdbtest1

Reading symbols from gdbtest1...done.3 (gdb) l

1 int main()5 2 {

3 int a, b, c;7 4 a=5;

5 b=10;9 6 b+=a;

7 c=b+a;11 8 return 0;

9 }� �5. gdb b�

(gdb) b 22 Breakpoint 1 at 0x400478: file gdbtest1.c, line 2.� �

6. gdb r 程式 debuginfos�(gdb) r

2 Starting program: /home/dywang/Documents/latex/clanguage/gcc/gdbtest1

4 Breakpoint 1, main () at gdbtest1.c:44 a=5;

6 Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6_4.2.x86_64� �

7. debuginfos�[root@dyH ~]# vim /etc/yum.repos.d/CentOS-Debuginfo.repo

2 ...enabled=1

4[root@dyH ~]# debuginfo-install glibc-2.12-1.107.el6_4.2.x86_64� �

8. gdb r 程式�1 (gdb) r

The program being debugged has been started already.3 Start it from the beginning? (y or n) y

5 Starting program: /home/dywang/Documents/latex/clanguage/gcc/gdbtest1

7 Breakpoint 1, main () at gdbtest1.c:4

De-Yu Wang CSIE CYUT 165

Page 168: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.3. PYTHON GDB CHAPTER 20. GDB

4 a=5;� �9. gdb p b 0�

(gdb) p b2 $1 = 0� �

10. gdb n b 10 a 5�(gdb) n

2 5 b=10;(gdb) n

4 6 b+=a;(gdb) p a

6 $2 = 5(gdb) p b

8 $3 = 10(gdb) n

10 7 c=b+a;(gdb) p b

12 $4 = 15� �11. gdb n b 15�

(gdb) n2 7 c=b+a;

(gdb) p b4 $4 = 15� �

12. gdb c 程式 q gdb�(gdb) c

2 Continuing.

4 Program exited normally.(gdb) q� �

20.3 Python gdb

1. python gdb

De-Yu Wang CSIE CYUT 166

Page 169: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.4. GDB CHAPTER 20. GDB

�1 [dywang@dyw219 python]$ python -m gdb str.py� �

20.4 gdb

1. gdb�1 [dywang@dyH gcc]$ gdb -q gdbtest1

Reading symbols from gdbtest1...done.3 (gdb) help

List of classes of commands:5

aliases -- Aliases of other commands7 breakpoints -- Making program stop at certain points

data -- Examining data9 files -- Specifying and examining files

internals -- Maintenance commands11 obscure -- Obscure features

running -- Running the program13 stack -- Examining the stack

status -- Status inquiries15 support -- Support facilities

tracepoints -- Tracing of program execution without stopping the program17 user-defined -- User-defined commands

19 ---Type <return> to continue, or q <return> to quit---Type "help" followed by a class name for a list of commands in that

class.21 Type "help all" for the list of all commands.

Type "help" followed by command name for full documentation.23 Type "apropos word" to search for commands related to "word".

Command name abbreviations are allowed if unambiguous.� �2. gdb running�

(gdb) help running2 Running the program.

4 List of commands:

6 advance -- Continue the program up to the given location (same form asargs for break command)

attach -- Attach to a process or file outside of GDB8 continue -- Continue program being debugged

detach -- Detach a process or file previously attached10 detach checkpoint -- Detach from a checkpoint (experimental)

detach inferior -- Detach from inferior ID12 disconnect -- Disconnect from a target

finish -- Execute until selected stack frame returns

De-Yu Wang CSIE CYUT 167

Page 170: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.4. GDB CHAPTER 20. GDB

14 handle -- Specify how to handle a signalinferior -- Use this command to switch between inferiors

16 ---Type <return> to continue, or q <return> to quit---interrupt -- Interrupt the execution of the debugged program

18 jump -- Continue program being debugged at specified line or addresskill -- Kill execution of program being debugged

20 kill inferior -- Kill inferior IDnext -- Step program

22 nexti -- Step one instructionreverse-continue -- Continue program being debugged but run it in

reverse24 reverse-finish -- Execute backward until just before selected stack

frame is calledreverse-next -- Step program backward

26 reverse-nexti -- Step backward one instructionreverse-step -- Step program backward until it reaches the beginning of

another source line28 reverse-stepi -- Step backward exactly one instruction

run -- Start debugged program30 ---Type <return> to continue, or q <return> to quit---

signal -- Continue program giving it signal specified by the argument32 start -- Run the debugged program until the beginning of the main

procedurestep -- Step program until it reaches a different source line

34 stepi -- Step one instruction exactlytarget -- Connect to a target machine or process

36 target child -- Unix child process (started by the "run" command)target core -- Use a core file as a target

38 target exec -- Use an executable file as a targettarget extended-remote -- Use a remote computer via a serial line

40 target multi-thread -- Threads and pthreads supporttarget record -- Log program while executing and replay execution from

log42 target record-core -- Log program while executing and replay execution

from logtarget remote -- Use a remote computer via a serial line

44 target tfile -- Use a trace file as a targettask -- Use this command to switch between Ada tasks

46 ---Type <return> to continue, or q <return> to quit---thread -- Use this command to switch between threads

48 thread apply -- Apply a command to a list of threadsthread apply all -- Apply a command to all threads

50 until -- Execute until the program reaches a source line greater thanthe current

52 Type "help" followed by command name for full documentation.Type "apropos word" to search for commands related to "word".

54 Command name abbreviations are allowed if unambiguous.� �

De-Yu Wang CSIE CYUT 168

Page 171: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.5. GDB CHAPTER 20. GDB

20.5 gdb

1. gdb display b�[dywang@dyH gcc]$ gdb -q gdbtest1

2 Reading symbols from gdbtest1...done.(gdb) l

4 1 int main()2 {

6 3 int a, b, c;4 a=5;

8 5 b=10;6 b+=a;

10 7 c=b+a;8 return 0;

12 9 }(gdb) b 2

14 Breakpoint 1 at 0x400478: file gdbtest1.c, line 2.(gdb) r

16 Starting program: gdbtest1

18 Breakpoint 1, main () at gdbtest1.c:44 a=5;

20 (gdb) display b1: b = 0

22 (gdb) n5 b=10;

24 1: b = 0(gdb) n

26 6 b+=a;1: b = 10

28 (gdb) n7 c=b+a;

30 1: b = 15(gdb) n

32 8 return 0;1: b = 15

34 (gdb) n9 }

36 1: b = 15(gdb) c

38 Continuing.

40 Program exited normally.(gdb) q� �

2. gdb info display

�1 [dywang@dyH gcc]$ gdb -q gdbtest1

Reading symbols from gdbtest1...done.3 (gdb) b 2

De-Yu Wang CSIE CYUT 169

Page 172: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.5. GDB CHAPTER 20. GDB

Breakpoint 1 at 0x400478: file gdbtest1.c, line 2.5 (gdb) r

Starting program: gdbtest17

Breakpoint 1, main () at gdbtest1.c:49 4 a=5;

(gdb) info display11 There are no auto-display expressions now.

(gdb) info break13 Num Type Disp Enb Address What

1 breakpoint keep y 0x0000000000400478 in main at gdbtest1.c:2

15 breakpoint already hit 1 time� �3. a display info enable�

1 (gdb) display a1: a = 32767

3 (gdb) info displayAuto-display expressions now in effect:

5 Num Enb Expression1: y a� �

4. disable a display info disable�(gdb) disable display 1

2 (gdb) info displayAuto-display expressions now in effect:

4 Num Enb Expression1: n a� �

5. disable 1 info disable�1 (gdb) disable break 1

(gdb) info break3 Num Type Disp Enb Address What

1 breakpoint keep n 0x0000000000400478 in main at gdbtest1.c:2

5 breakpoint already hit 1 time� �6. b c display�

1 (gdb) display b2: b = 0

3 (gdb) display c3: c = 0

De-Yu Wang CSIE CYUT 170

Page 173: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

20.5. GDB CHAPTER 20. GDB

5 (gdb) info displayAuto-display expressions now in effect:

7 Num Enb Expression3: y c

9 2: y b1: n a� �

7. enable a display�(gdb) enable display 1

2 (gdb) info displayAuto-display expressions now in effect:

4 Num Enb Expression3: y c

6 2: y b1: y a� �

8. a, b, c display�1 (gdb) n

5 b=10;3 3: c = 0

2: b = 05 1: a = 5� �

9. delete display�1 (gdb) delete display 1

(gdb) info display3 Auto-display expressions now in effect:

Num Enb Expression5 3: y c

2: y b7 (gdb) delete display 2

(gdb) info display9 Auto-display expressions now in effect:

Num Enb Expression11 3: y c� �

De-Yu Wang CSIE CYUT 171

Page 174: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 21

Strip程式

21.1

1. strip readlef�1 [root@dyH ~]# yum install binutils� �

2. 程式�1 #include<stdio.h>

3 // Declare a static globalstatic int i=10;

5 // Declare a non static globalint global = 20;

7int inc_func()

9 {static int local = 0;

11 // return static local valuereturn (++local);

13 }

15 int main(void){

17 int count = inc_func();// Print the sum

19 printf( "\n [%d] \n",(count + global + i));

21 return 0;}� �

3. 式 程式�[dywang@dyH gcc]$ gcc -g -o stripex1 stripex1.c� �

172

Page 175: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.2. CHAPTER 21. STRIP 程式

4. �1 [dywang@dyH gcc]$ ll stripex1*

-rwxrwxr-x. 1 dywang dywang 8195 Sep 1 06:22 stripex13 -rw-rw-r--. 1 dywang dywang 323 Aug 31 22:19 stripex1.c� �

21.2

1. ELF(Executable and Linkable Format) 式 stripex175�

1 [dywang@dyH gcc]$ readelf -s stripex1� ��

1 # readelf -s stripex1

3 Symbol table '.dynsym' contains 4 entries:Num: Value Size Type Bind Vis Ndx Name

5 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@GLIBC_2.2.5 (2)7 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@GLIBC_2.2.5 (2)9

Symbol table '.symtab' contains 75 entries:11 Num: Value Size Type Bind Vis Ndx Name

0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND13 1: 0000000000400200 0 SECTION LOCAL DEFAULT 1

2: 000000000040021c 0 SECTION LOCAL DEFAULT 215 3: 000000000040023c 0 SECTION LOCAL DEFAULT 3

4: 0000000000400260 0 SECTION LOCAL DEFAULT 417 5: 0000000000400280 0 SECTION LOCAL DEFAULT 5

6: 00000000004002e0 0 SECTION LOCAL DEFAULT 619 7: 0000000000400320 0 SECTION LOCAL DEFAULT 7

8: 0000000000400328 0 SECTION LOCAL DEFAULT 821 9: 0000000000400348 0 SECTION LOCAL DEFAULT 9

10: 0000000000400360 0 SECTION LOCAL DEFAULT 1023 11: 0000000000400390 0 SECTION LOCAL DEFAULT 11

12: 00000000004003a8 0 SECTION LOCAL DEFAULT 1225 13: 00000000004003e0 0 SECTION LOCAL DEFAULT 13

14: 0000000000400608 0 SECTION LOCAL DEFAULT 1427 15: 0000000000400618 0 SECTION LOCAL DEFAULT 15

16: 0000000000400634 0 SECTION LOCAL DEFAULT 1629 17: 0000000000400660 0 SECTION LOCAL DEFAULT 17

18: 0000000000600700 0 SECTION LOCAL DEFAULT 1831 19: 0000000000600710 0 SECTION LOCAL DEFAULT 19

20: 0000000000600720 0 SECTION LOCAL DEFAULT 20

De-Yu Wang CSIE CYUT 173

Page 176: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.2. CHAPTER 21. STRIP 程式

33 21: 0000000000600728 0 SECTION LOCAL DEFAULT 2122: 00000000006008b8 0 SECTION LOCAL DEFAULT 22

35 23: 00000000006008c0 0 SECTION LOCAL DEFAULT 2324: 00000000006008e8 0 SECTION LOCAL DEFAULT 24

37 25: 00000000006008f8 0 SECTION LOCAL DEFAULT 2526: 0000000000000000 0 SECTION LOCAL DEFAULT 26

39 27: 0000000000000000 0 SECTION LOCAL DEFAULT 2728: 0000000000000000 0 SECTION LOCAL DEFAULT 28

41 29: 0000000000000000 0 SECTION LOCAL DEFAULT 2930: 0000000000000000 0 SECTION LOCAL DEFAULT 30

43 31: 0000000000000000 0 SECTION LOCAL DEFAULT 3132: 0000000000000000 0 SECTION LOCAL DEFAULT 32

45 33: 0000000000000000 0 SECTION LOCAL DEFAULT 3334: 000000000040040c 0 FUNC LOCAL DEFAULT 13

call_gmon_start47 35: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c

36: 0000000000600700 0 OBJECT LOCAL DEFAULT 18 __CTOR_LIST__49 37: 0000000000600710 0 OBJECT LOCAL DEFAULT 19 __DTOR_LIST__

38: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_LIST__51 39: 0000000000400430 0 FUNC LOCAL DEFAULT 13

__do_global_dtors_aux40: 00000000006008f8 1 OBJECT LOCAL DEFAULT 25 completed

.634953 41: 0000000000600900 8 OBJECT LOCAL DEFAULT 25 dtor_idx.6351

42: 00000000004004a0 0 FUNC LOCAL DEFAULT 13 frame_dummy55 43: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c

44: 0000000000600708 0 OBJECT LOCAL DEFAULT 18 __CTOR_END__57 45: 00000000004006f8 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__

46: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_END__59 47: 00000000004005d0 0 FUNC LOCAL DEFAULT 13

__do_global_ctors_aux48: 0000000000000000 0 FILE LOCAL DEFAULT ABS stripex1.c

61 49: 00000000006008ec 4 OBJECT LOCAL DEFAULT 24 i50: 0000000000600908 4 OBJECT LOCAL DEFAULT 25 local.2052

63 51: 00000000006008c0 0 OBJECT LOCAL DEFAULT 23_GLOBAL_OFFSET_TABLE_

52: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_end

65 53: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_start

54: 0000000000600728 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC67 55: 00000000006008e8 0 NOTYPE WEAK DEFAULT 24 data_start

56: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDprintf@@GLIBC_2.2.5

69 57: 0000000000400530 2 FUNC GLOBAL DEFAULT 13__libc_csu_fini

58: 00000000004003e0 0 FUNC GLOBAL DEFAULT 13 _start71 59: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__60: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

_Jv_RegisterClasses73 61: 0000000000400608 0 FUNC GLOBAL DEFAULT 14 _fini

62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND__libc_start_main@@GLIBC_

75 63: 00000000006008f0 4 OBJECT GLOBAL DEFAULT 24 global

De-Yu Wang CSIE CYUT 174

Page 177: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

64: 0000000000400618 4 OBJECT GLOBAL DEFAULT 15_IO_stdin_used

77 65: 00000000006008e8 0 NOTYPE GLOBAL DEFAULT 24 __data_start66: 0000000000400620 0 OBJECT GLOBAL HIDDEN 15 __dso_handle

79 67: 0000000000600718 0 OBJECT GLOBAL HIDDEN 19 __DTOR_END__68: 0000000000400540 137 FUNC GLOBAL DEFAULT 13

__libc_csu_init81 69: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS __bss_start

70: 0000000000600910 0 NOTYPE GLOBAL DEFAULT ABS _end83 71: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS _edata

72: 00000000004004c4 27 FUNC GLOBAL DEFAULT 13 inc_func85 73: 00000000004004df 67 FUNC GLOBAL DEFAULT 13 main

74: 0000000000400390 0 FUNC GLOBAL DEFAULT 11 _init� �2. strip�

ng@dyH gcc]$ strip -s stripex1� �3. �

1 [dywang@dyH gcc]$ readelf -s stripex1

3 Symbol table '.dynsym' contains 4 entries:Num: Value Size Type Bind Vis Ndx Name

5 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@GLIBC_2.2.5 (2)7 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@GLIBC_2.2.5 (2)� �4. 8195 bytes 4368 bytes�

[dywang@dyH gcc]$ ll stripex1*2 -rwxrwxr-x. 1 dywang dywang 4368 Sep 1 06:41 stripex1

-rw-rw-r--. 1 dywang dywang 323 Aug 31 22:19 stripex1.c� �

21.3 strip

21.3.1 strip-debug1. 程式

De-Yu Wang CSIE CYUT 175

Page 178: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

�1 [dywang@dyH gcc]$ gcc -g -o stripex1 stripex1.c� �

2. �1 [dywang@dyH gcc]$ strip --strip-debug stripex1� �

3. 75 65 10�1

Symbol table '.dynsym' contains 4 entries:3 Num: Value Size Type Bind Vis Ndx Name

0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND5 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@GLIBC_2.2.5 (2)2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__7 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@GLIBC_2.2.5 (2)

9 Symbol table '.symtab' contains 65 entries:Num: Value Size Type Bind Vis Ndx Name

11 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND1: 000000000040040c 0 FUNC LOCAL DEFAULT 13

call_gmon_start13 2: 0000000000600700 0 OBJECT LOCAL DEFAULT 18 __CTOR_LIST__

3: 0000000000600710 0 OBJECT LOCAL DEFAULT 19 __DTOR_LIST__15 4: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_LIST__

5: 0000000000400430 0 FUNC LOCAL DEFAULT 13__do_global_dtors_aux

17 6: 00000000006008f8 1 OBJECT LOCAL DEFAULT 25 completed.6349

7: 0000000000600900 8 OBJECT LOCAL DEFAULT 25 dtor_idx.635119 8: 00000000004004a0 0 FUNC LOCAL DEFAULT 13 frame_dummy

9: 0000000000600708 0 OBJECT LOCAL DEFAULT 18 __CTOR_END__21 10: 00000000004006f8 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__

11: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_END__23 12: 00000000004005d0 0 FUNC LOCAL DEFAULT 13

__do_global_ctors_aux13: 00000000006008ec 4 OBJECT LOCAL DEFAULT 24 i

25 14: 0000000000600908 4 OBJECT LOCAL DEFAULT 25 local.205215: 00000000006008c0 0 OBJECT LOCAL DEFAULT 23

_GLOBAL_OFFSET_TABLE_27 16: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18

__init_array_end17: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18

__init_array_start29 18: 0000000000600728 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC

19: 0000000000400200 0 SECTION LOCAL DEFAULT 131 20: 000000000040021c 0 SECTION LOCAL DEFAULT 2

21: 000000000040023c 0 SECTION LOCAL DEFAULT 3

De-Yu Wang CSIE CYUT 176

Page 179: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

33 22: 0000000000400260 0 SECTION LOCAL DEFAULT 423: 0000000000400280 0 SECTION LOCAL DEFAULT 5

35 24: 00000000004002e0 0 SECTION LOCAL DEFAULT 625: 0000000000400320 0 SECTION LOCAL DEFAULT 7

37 26: 0000000000400328 0 SECTION LOCAL DEFAULT 827: 0000000000400348 0 SECTION LOCAL DEFAULT 9

39 28: 0000000000400360 0 SECTION LOCAL DEFAULT 1029: 0000000000400390 0 SECTION LOCAL DEFAULT 11

41 30: 00000000004003a8 0 SECTION LOCAL DEFAULT 1231: 00000000004003e0 0 SECTION LOCAL DEFAULT 13

43 32: 0000000000400608 0 SECTION LOCAL DEFAULT 1433: 0000000000400618 0 SECTION LOCAL DEFAULT 15

45 34: 0000000000400634 0 SECTION LOCAL DEFAULT 1635: 0000000000400660 0 SECTION LOCAL DEFAULT 17

47 36: 0000000000600700 0 SECTION LOCAL DEFAULT 1837: 0000000000600710 0 SECTION LOCAL DEFAULT 19

49 38: 0000000000600720 0 SECTION LOCAL DEFAULT 2039: 0000000000600728 0 SECTION LOCAL DEFAULT 21

51 40: 00000000006008b8 0 SECTION LOCAL DEFAULT 2241: 00000000006008c0 0 SECTION LOCAL DEFAULT 23

53 42: 00000000006008e8 0 SECTION LOCAL DEFAULT 2443: 00000000006008f8 0 SECTION LOCAL DEFAULT 25

55 44: 0000000000000000 0 SECTION LOCAL DEFAULT 2645: 00000000006008e8 0 NOTYPE WEAK DEFAULT 24 data_start

57 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDprintf@@GLIBC_2.2.5

47: 0000000000400530 2 FUNC GLOBAL DEFAULT 13__libc_csu_fini

59 48: 00000000004003e0 0 FUNC GLOBAL DEFAULT 13 _start49: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__61 50: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

_Jv_RegisterClasses51: 0000000000400608 0 FUNC GLOBAL DEFAULT 14 _fini

63 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND__libc_start_main@@GLIBC_

53: 00000000006008f0 4 OBJECT GLOBAL DEFAULT 24 global65 54: 0000000000400618 4 OBJECT GLOBAL DEFAULT 15

_IO_stdin_used55: 00000000006008e8 0 NOTYPE GLOBAL DEFAULT 24 __data_start

67 56: 0000000000400620 0 OBJECT GLOBAL HIDDEN 15 __dso_handle57: 0000000000600718 0 OBJECT GLOBAL HIDDEN 19 __DTOR_END__

69 58: 0000000000400540 137 FUNC GLOBAL DEFAULT 13__libc_csu_init

59: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS __bss_start71 60: 0000000000600910 0 NOTYPE GLOBAL DEFAULT ABS _end

61: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS _edata73 62: 00000000004004c4 27 FUNC GLOBAL DEFAULT 13 inc_func

63: 00000000004004df 67 FUNC GLOBAL DEFAULT 13 main75 64: 0000000000400390 0 FUNC GLOBAL DEFAULT 11 _init� �

4. 8195 bytes 6581 bytes�1 [dywang@dyH gcc]$ ll stripex1*

De-Yu Wang CSIE CYUT 177

Page 180: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

-rwxrwxr-x. 1 dywang dywang 6581 Sep 1 06:52 stripex13 -rw-rw-r--. 1 dywang dywang 323 Aug 31 22:19 stripex1.c� �

21.3.2 strip-unneeded1. 程式�

1 [dywang@dyH gcc]$ gcc -g -o stripex1 stripex1.c� �2. -a elf�

1 [dywang@dyH gcc]$ strip --strip-debug stripex1[dywang@dyH gcc]$ readelf -a stripex1 | tee elfad.txt� �

3. -a elf�[dywang@dyH gcc]$ strip --strip-unneeded stripex1

2 [dywang@dyH gcc]$ readelf -a stripex1 | tee elfadun.txt[dywang@dyH gcc]$ diff elfad.txt elfadun.txt� �

4. �1 [dywang@dyH gcc]$ diff elfad.txt elfadun.txt | tee elfaundiff.txt� �

5. �1 13c13

< Start of section headers: 2592 (bytes into file)3 ---

> Start of section headers: 2576 (bytes into file)5 19c19

< Number of section headers: 307 ---

> Number of section headers: 289 80,84c80

< 00000000000000fe 0000000000000000 0 0 111 < [28] .symtab SYMTAB 0000000000000000 000011a0

< 0000000000000618 0000000000000018 29 45 813 < [29] .strtab STRTAB 0000000000000000 000017b8

< 00000000000001fd 0000000000000000 0 0 115 ---

> 00000000000000ee 0000000000000000 0 0 1

De-Yu Wang CSIE CYUT 178

Page 181: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

17 165,232d160< Symbol table '.symtab' contains 65 entries:

19 < Num: Value Size Type Bind Vis Ndx Name< 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND

21 < 1: 000000000040040c 0 FUNC LOCAL DEFAULT 13call_gmon_start

< 2: 0000000000600700 0 OBJECT LOCAL DEFAULT 18__CTOR_LIST__

23 < 3: 0000000000600710 0 OBJECT LOCAL DEFAULT 19__DTOR_LIST__

< 4: 0000000000600720 0 OBJECT LOCAL DEFAULT 20__JCR_LIST__

25 < 5: 0000000000400430 0 FUNC LOCAL DEFAULT 13__do_global_dtors_aux

< 6: 00000000006008f8 1 OBJECT LOCAL DEFAULT 25 completed.6349

27 < 7: 0000000000600900 8 OBJECT LOCAL DEFAULT 25 dtor_idx.6351

< 8: 00000000004004a0 0 FUNC LOCAL DEFAULT 13 frame_dummy29 < 9: 0000000000600708 0 OBJECT LOCAL DEFAULT 18

__CTOR_END__< 10: 00000000004006f8 0 OBJECT LOCAL DEFAULT 17

__FRAME_END__31 < 11: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_END__

< 12: 00000000004005d0 0 FUNC LOCAL DEFAULT 13__do_global_ctors_aux

33 < 13: 00000000006008ec 4 OBJECT LOCAL DEFAULT 24 i< 14: 0000000000600908 4 OBJECT LOCAL DEFAULT 25 local.2052

35 < 15: 00000000006008c0 0 OBJECT LOCAL DEFAULT 23_GLOBAL_OFFSET_TABLE_

< 16: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_end

37 < 17: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_start

< 18: 0000000000600728 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC39 < 19: 0000000000400200 0 SECTION LOCAL DEFAULT 1

< 20: 000000000040021c 0 SECTION LOCAL DEFAULT 241 < 21: 000000000040023c 0 SECTION LOCAL DEFAULT 3

< 22: 0000000000400260 0 SECTION LOCAL DEFAULT 443 < 23: 0000000000400280 0 SECTION LOCAL DEFAULT 5

< 24: 00000000004002e0 0 SECTION LOCAL DEFAULT 645 < 25: 0000000000400320 0 SECTION LOCAL DEFAULT 7

< 26: 0000000000400328 0 SECTION LOCAL DEFAULT 847 < 27: 0000000000400348 0 SECTION LOCAL DEFAULT 9

< 28: 0000000000400360 0 SECTION LOCAL DEFAULT 1049 < 29: 0000000000400390 0 SECTION LOCAL DEFAULT 11

< 30: 00000000004003a8 0 SECTION LOCAL DEFAULT 1251 < 31: 00000000004003e0 0 SECTION LOCAL DEFAULT 13

< 32: 0000000000400608 0 SECTION LOCAL DEFAULT 1453 < 33: 0000000000400618 0 SECTION LOCAL DEFAULT 15

< 34: 0000000000400634 0 SECTION LOCAL DEFAULT 1655 < 35: 0000000000400660 0 SECTION LOCAL DEFAULT 17

< 36: 0000000000600700 0 SECTION LOCAL DEFAULT 1857 < 37: 0000000000600710 0 SECTION LOCAL DEFAULT 19

< 38: 0000000000600720 0 SECTION LOCAL DEFAULT 20

De-Yu Wang CSIE CYUT 179

Page 182: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

59 < 39: 0000000000600728 0 SECTION LOCAL DEFAULT 21< 40: 00000000006008b8 0 SECTION LOCAL DEFAULT 22

61 < 41: 00000000006008c0 0 SECTION LOCAL DEFAULT 23< 42: 00000000006008e8 0 SECTION LOCAL DEFAULT 24

63 < 43: 00000000006008f8 0 SECTION LOCAL DEFAULT 25< 44: 0000000000000000 0 SECTION LOCAL DEFAULT 26

65 < 45: 00000000006008e8 0 NOTYPE WEAK DEFAULT 24 data_start< 46: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@@GLIBC_2.2.567 < 47: 0000000000400530 2 FUNC GLOBAL DEFAULT 13

__libc_csu_fini< 48: 00000000004003e0 0 FUNC GLOBAL DEFAULT 13 _start

69 < 49: 0000000000000000 0 NOTYPE WEAK DEFAULT UND__gmon_start__

< 50: 0000000000000000 0 NOTYPE WEAK DEFAULT UND_Jv_RegisterClasses

71 < 51: 0000000000400608 0 FUNC GLOBAL DEFAULT 14 _fini< 52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@@GLIBC_73 < 53: 00000000006008f0 4 OBJECT GLOBAL DEFAULT 24 global

< 54: 0000000000400618 4 OBJECT GLOBAL DEFAULT 15_IO_stdin_used

75 < 55: 00000000006008e8 0 NOTYPE GLOBAL DEFAULT 24__data_start

< 56: 0000000000400620 0 OBJECT GLOBAL HIDDEN 15__dso_handle

77 < 57: 0000000000600718 0 OBJECT GLOBAL HIDDEN 19__DTOR_END__

< 58: 0000000000400540 137 FUNC GLOBAL DEFAULT 13__libc_csu_init

79 < 59: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS __bss_start< 60: 0000000000600910 0 NOTYPE GLOBAL DEFAULT ABS _end

81 < 61: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS _edata< 62: 00000000004004c4 27 FUNC GLOBAL DEFAULT 13 inc_func

83 < 63: 00000000004004df 67 FUNC GLOBAL DEFAULT 13 main< 64: 0000000000400390 0 FUNC GLOBAL DEFAULT 11 _init

85 <� �6. 8195 bytes 4368 bytes�

1 [dywang@dyH gcc]$ ll stripex1*-rwxrwxr-x. 1 dywang dywang 4368 Sep 1 08:34 stripex1

3 -rw-rw-r--. 1 dywang dywang 323 Aug 31 22:19 stripex1.c� �

21.3.3 keep-symbol1. 程式�

1 [dywang@dyH gcc]$ gcc -g -o stripex1 stripex1.c[dywang@dyH gcc]$ ll stripex1

3 -rwxrwxr-x. 1 dywang dywang 8195 Sep 1 08:58 stripex1

De-Yu Wang CSIE CYUT 180

Page 183: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

� �2. �

1 [dywang@dyH gcc]$ strip -s -Kstripex1.c stripex1� �3. 75 28

stripex1.c�1

Symbol table '.dynsym' contains 4 entries:3 Num: Value Size Type Bind Vis Ndx Name

0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND5 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@GLIBC_2.2.5 (2)2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__7 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@GLIBC_2.2.5 (2)

9 Symbol table '.symtab' contains 28 entries:Num: Value Size Type Bind Vis Ndx Name

11 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND1: 0000000000000000 0 FILE LOCAL DEFAULT ABS stripex1.c

13 2: 0000000000400200 0 SECTION LOCAL DEFAULT 13: 000000000040021c 0 SECTION LOCAL DEFAULT 2

15 4: 000000000040023c 0 SECTION LOCAL DEFAULT 35: 0000000000400260 0 SECTION LOCAL DEFAULT 4

17 6: 0000000000400280 0 SECTION LOCAL DEFAULT 57: 00000000004002e0 0 SECTION LOCAL DEFAULT 6

19 8: 0000000000400320 0 SECTION LOCAL DEFAULT 79: 0000000000400328 0 SECTION LOCAL DEFAULT 8

21 10: 0000000000400348 0 SECTION LOCAL DEFAULT 911: 0000000000400360 0 SECTION LOCAL DEFAULT 10

23 12: 0000000000400390 0 SECTION LOCAL DEFAULT 1113: 00000000004003a8 0 SECTION LOCAL DEFAULT 12

25 14: 00000000004003e0 0 SECTION LOCAL DEFAULT 1315: 0000000000400608 0 SECTION LOCAL DEFAULT 14

27 16: 0000000000400618 0 SECTION LOCAL DEFAULT 1517: 0000000000400634 0 SECTION LOCAL DEFAULT 16

29 18: 0000000000400660 0 SECTION LOCAL DEFAULT 1719: 0000000000600700 0 SECTION LOCAL DEFAULT 18

31 20: 0000000000600710 0 SECTION LOCAL DEFAULT 1921: 0000000000600720 0 SECTION LOCAL DEFAULT 20

33 22: 0000000000600728 0 SECTION LOCAL DEFAULT 2123: 00000000006008b8 0 SECTION LOCAL DEFAULT 22

35 24: 00000000006008c0 0 SECTION LOCAL DEFAULT 2325: 00000000006008e8 0 SECTION LOCAL DEFAULT 24

37 26: 00000000006008f8 0 SECTION LOCAL DEFAULT 2527: 0000000000000000 0 SECTION LOCAL DEFAULT 26� �

De-Yu Wang CSIE CYUT 181

Page 184: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

4. 8195 bytes 5196 bytes�[dywang@dyH gcc]$ ll stripex1

2 -rwxrwxr-x. 1 dywang dywang 5196 Sep 1 09:03 stripex1� �

21.3.4 strip-symbol1. 程式�

[dywang@dyH gcc]$ gcc -g -o stripex1 stripex1.c2 [dywang@dyH gcc]$ ll stripex1

-rwxrwxr-x. 1 dywang dywang 8195 Sep 1 09:08 stripex1� �2. �

1 [dywang@dyH gcc]$ strip -Nstripex1.c stripex1� �3. 75 74 stripex1.c

�1

Symbol table '.dynsym' contains 4 entries:3 Num: Value Size Type Bind Vis Ndx Name

0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND5 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

printf@GLIBC_2.2.5 (2)2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__7 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@GLIBC_2.2.5 (2)

9 Symbol table '.symtab' contains 74 entries:Num: Value Size Type Bind Vis Ndx Name

11 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND1: 0000000000400200 0 SECTION LOCAL DEFAULT 1

13 2: 000000000040021c 0 SECTION LOCAL DEFAULT 23: 000000000040023c 0 SECTION LOCAL DEFAULT 3

15 4: 0000000000400260 0 SECTION LOCAL DEFAULT 45: 0000000000400280 0 SECTION LOCAL DEFAULT 5

17 6: 00000000004002e0 0 SECTION LOCAL DEFAULT 67: 0000000000400320 0 SECTION LOCAL DEFAULT 7

19 8: 0000000000400328 0 SECTION LOCAL DEFAULT 89: 0000000000400348 0 SECTION LOCAL DEFAULT 9

21 10: 0000000000400360 0 SECTION LOCAL DEFAULT 1011: 0000000000400390 0 SECTION LOCAL DEFAULT 11

23 12: 00000000004003a8 0 SECTION LOCAL DEFAULT 1213: 00000000004003e0 0 SECTION LOCAL DEFAULT 13

De-Yu Wang CSIE CYUT 182

Page 185: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

25 14: 0000000000400608 0 SECTION LOCAL DEFAULT 1415: 0000000000400618 0 SECTION LOCAL DEFAULT 15

27 16: 0000000000400634 0 SECTION LOCAL DEFAULT 1617: 0000000000400660 0 SECTION LOCAL DEFAULT 17

29 18: 0000000000600700 0 SECTION LOCAL DEFAULT 1819: 0000000000600710 0 SECTION LOCAL DEFAULT 19

31 20: 0000000000600720 0 SECTION LOCAL DEFAULT 2021: 0000000000600728 0 SECTION LOCAL DEFAULT 21

33 22: 00000000006008b8 0 SECTION LOCAL DEFAULT 2223: 00000000006008c0 0 SECTION LOCAL DEFAULT 23

35 24: 00000000006008e8 0 SECTION LOCAL DEFAULT 2425: 00000000006008f8 0 SECTION LOCAL DEFAULT 25

37 26: 0000000000000000 0 SECTION LOCAL DEFAULT 2627: 0000000000000000 0 SECTION LOCAL DEFAULT 27

39 28: 0000000000000000 0 SECTION LOCAL DEFAULT 2829: 0000000000000000 0 SECTION LOCAL DEFAULT 29

41 30: 0000000000000000 0 SECTION LOCAL DEFAULT 3031: 0000000000000000 0 SECTION LOCAL DEFAULT 31

43 32: 0000000000000000 0 SECTION LOCAL DEFAULT 3233: 0000000000000000 0 SECTION LOCAL DEFAULT 33

45 34: 000000000040040c 0 FUNC LOCAL DEFAULT 13call_gmon_start

35: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c47 36: 0000000000600700 0 OBJECT LOCAL DEFAULT 18 __CTOR_LIST__

37: 0000000000600710 0 OBJECT LOCAL DEFAULT 19 __DTOR_LIST__49 38: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_LIST__

39: 0000000000400430 0 FUNC LOCAL DEFAULT 13__do_global_dtors_aux

51 40: 00000000006008f8 1 OBJECT LOCAL DEFAULT 25 completed.6349

41: 0000000000600900 8 OBJECT LOCAL DEFAULT 25 dtor_idx.635153 42: 00000000004004a0 0 FUNC LOCAL DEFAULT 13 frame_dummy

43: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c55 44: 0000000000600708 0 OBJECT LOCAL DEFAULT 18 __CTOR_END__

45: 00000000004006f8 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__57 46: 0000000000600720 0 OBJECT LOCAL DEFAULT 20 __JCR_END__

47: 00000000004005d0 0 FUNC LOCAL DEFAULT 13__do_global_ctors_aux

59 48: 00000000006008ec 4 OBJECT LOCAL DEFAULT 24 i49: 0000000000600908 4 OBJECT LOCAL DEFAULT 25 local.2052

61 50: 00000000006008c0 0 OBJECT LOCAL DEFAULT 23_GLOBAL_OFFSET_TABLE_

51: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_end

63 52: 00000000006006fc 0 NOTYPE LOCAL DEFAULT 18__init_array_start

53: 0000000000600728 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC65 54: 00000000006008e8 0 NOTYPE WEAK DEFAULT 24 data_start

55: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDprintf@@GLIBC_2.2.5

67 56: 0000000000400530 2 FUNC GLOBAL DEFAULT 13__libc_csu_fini

57: 00000000004003e0 0 FUNC GLOBAL DEFAULT 13 _start69 58: 0000000000000000 0 NOTYPE WEAK DEFAULT UND

__gmon_start__

De-Yu Wang CSIE CYUT 183

Page 186: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

59: 0000000000000000 0 NOTYPE WEAK DEFAULT UND_Jv_RegisterClasses

71 60: 0000000000400608 0 FUNC GLOBAL DEFAULT 14 _fini61: 0000000000000000 0 FUNC GLOBAL DEFAULT UND

__libc_start_main@@GLIBC_73 62: 00000000006008f0 4 OBJECT GLOBAL DEFAULT 24 global

63: 0000000000400618 4 OBJECT GLOBAL DEFAULT 15_IO_stdin_used

75 64: 00000000006008e8 0 NOTYPE GLOBAL DEFAULT 24 __data_start65: 0000000000400620 0 OBJECT GLOBAL HIDDEN 15 __dso_handle

77 66: 0000000000600718 0 OBJECT GLOBAL HIDDEN 19 __DTOR_END__67: 0000000000400540 137 FUNC GLOBAL DEFAULT 13

__libc_csu_init79 68: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS __bss_start

69: 0000000000600910 0 NOTYPE GLOBAL DEFAULT ABS _end81 70: 00000000006008f4 0 NOTYPE GLOBAL DEFAULT ABS _edata

71: 00000000004004c4 27 FUNC GLOBAL DEFAULT 13 inc_func83 72: 00000000004004df 67 FUNC GLOBAL DEFAULT 13 main

73: 0000000000400390 0 FUNC GLOBAL DEFAULT 11 _init� �4. 8195 bytes 8160 bytes�

[dywang@dyH gcc]$ ll stripex12 -rwxrwxr-x. 1 dywang dywang 8160 Sep 1 09:10 stripex1� �

21.3.5 preserve-dates1. /�

[dywang@dyH gcc]$ stat stripex1 stripex1_stripped2 File: `stripex1'

Size: 8195 Blocks: 24 IO Block: 4096 regular file4 Device: fd03h/64771d Inode: 18142 Links: 1

Access: (0775/-rwxrwxr-x) Uid: ( 500/ dywang) Gid: ( 500/ dywang)6 Access: 2013-09-01 09:19:35.495806134 +0800

Modify: 2013-09-01 09:18:57.410054071 +08008 Change: 2013-09-01 09:18:57.410054071 +0800

File: `stripex1_stripped'10 Size: 4368 Blocks: 16 IO Block: 4096 regular file

Device: fd03h/64771d Inode: 18144 Links: 112 Access: (0775/-rwxrwxr-x) Uid: ( 500/ dywang) Gid: ( 500/ dywang)

Access: 2013-09-01 09:19:35.495806134 +080014 Modify: 2013-09-01 09:19:35.495806134 +0800

Change: 2013-09-01 09:19:35.495806134 +0800� �2. /�

1 [dywang@dyH gcc]$ strip -p -ostripex1_strippedp stripex1

De-Yu Wang CSIE CYUT 184

Page 187: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

21.3. STRIP CHAPTER 21. STRIP 程式

� �3. stripex1_strippedp stripex1 / i

�1 [dywang@dyH gcc]$ stat stripex1 stripex1_stripped

File: `stripex1'3 [dywang@dyH gcc]$ stat stripex1 stripex1_stripped stripex1_strippedp

File: `stripex1'5 Size: 8195 Blocks: 24 IO Block: 4096 regular file

Device: fd03h/64771d Inode: 18142 Links: 17 Access: (0775/-rwxrwxr-x) Uid: ( 500/ dywang) Gid: ( 500/ dywang)

Access: 2013-09-01 09:19:35.495806134 +08009 Modify: 2013-09-01 09:18:57.410054071 +0800

Change: 2013-09-01 09:18:57.410054071 +080011 File: `stripex1_stripped'

Size: 4368 Blocks: 16 IO Block: 4096 regular file13 Device: fd03h/64771d Inode: 18144 Links: 1

Access: (0775/-rwxrwxr-x) Uid: ( 500/ dywang) Gid: ( 500/ dywang)15 Access: 2013-09-01 09:19:35.495806134 +0800

Modify: 2013-09-01 09:19:35.495806134 +080017 Change: 2013-09-01 09:19:35.495806134 +0800

File: `stripex1_strippedp'19 Size: 4368 Blocks: 16 IO Block: 4096 regular file

Device: fd03h/64771d Inode: 18141 Links: 121 Access: (0775/-rwxrwxr-x) Uid: ( 500/ dywang) Gid: ( 500/ dywang)

Access: 2013-09-01 09:19:35.000000000 +080023 Modify: 2013-09-01 09:18:57.000000000 +0800

Change: 2013-09-01 09:34:19.322931661 +0800� �

De-Yu Wang CSIE CYUT 185

Page 188: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

Chapter 22

QtEmbedded porting

22.1 arm

1. Qt Embedded porting on ARM platform

2. arm-linux-gcc�[root@dyH ~]# cd /usr/src

2 [root@dyH src]# wget http://www.friendlyarm.net/dl.php?file=arm-linux-gcc-4.3.2.tgz� �

3. arm-linux-gcc tar usr/local/arm/4.3.2 /arm-linux-gcc�

[root@dyH ~]# cd /2 [dywang@dyH /]$ tar zxvf /usr/src/arm-linux-gcc-4.3.2.tgz

[root@dyH ~]# cd -4 [root@dyH src]# ls /usr/local/arm/

4.3.2� �4. arm-linux-gcc /usr/ local /

usr.local/arm/4.3.2/bin�1 [root@dyH src]# ll /usr/local/arm/4.3.2/

total 203 drwxr-xr-x. 6 root root 4096 Nov 18 2008 arm-none-linux-gnueabi

drwxr-xr-x. 2 root root 4096 Mar 25 2009 bin5 drwxr-xr-x. 3 root root 4096 Nov 18 2008 lib

drwxr-xr-x. 4 root root 4096 Nov 18 2008 libexec7 drwxr-xr-x. 3 root root 4096 Nov 18 2008 share

9 [root@dyH src]# ls /usr/local/arm/4.3.2/binarm-linux-addr2line arm-none-linux-gnueabi-addr2line

11 arm-linux-ar arm-none-linux-gnueabi-ararm-linux-as arm-none-linux-gnueabi-as

186

Page 189: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.1. ARM CHAPTER 22. QTEMBEDDED PORTING

13 arm-linux-c++ arm-none-linux-gnueabi-c++arm-linux-c++filt arm-none-linux-gnueabi-c++filt

15 arm-linux-cpp arm-none-linux-gnueabi-cpparm-linux-g++ arm-none-linux-gnueabi-g++

17 arm-linux-gcc arm-none-linux-gnueabi-gccarm-linux-gcc-4.3.2 arm-none-linux-gnueabi-gcc-4.3.2

19 arm-linux-gcov arm-none-linux-gnueabi-gcovarm-linux-gdb arm-none-linux-gnueabi-gdb

21 arm-linux-gdbtui arm-none-linux-gnueabi-gdbtuiarm-linux-gprof arm-none-linux-gnueabi-gprof

23 arm-linux-ld arm-none-linux-gnueabi-ldarm-linux-nm arm-none-linux-gnueabi-nm

25 arm-linux-objcopy arm-none-linux-gnueabi-objcopyarm-linux-objdump arm-none-linux-gnueabi-objdump

27 arm-linux-ranlib arm-none-linux-gnueabi-ranlibarm-linux-readelf arm-none-linux-gnueabi-readelf

29 arm-linux-size arm-none-linux-gnueabi-sizearm-linux-sprite arm-none-linux-gnueabi-sprite

31 arm-linux-strings arm-none-linux-gnueabi-stringsarm-linux-strip arm-none-linux-gnueabi-strip� �

5. PATH arm-linux-gcc arm-linux-gcc

�[root@dyH src]# echo $PATH

2 /usr/bin:/bin:/sbin:/usr/sbin:/sbin:/usr/sbin:/root/bin:/root/bin[root@dyH src]# arm-linux-gcc

4 -bash: arm-linux-gcc: command not found� �6. export arm-linux-gcc PATH�

[root@dyH ~]# cd2 [root@dyH ~]# echo $PATH

/usr/bin:/bin:/sbin:/usr/sbin:/sbin:/usr/sbin:/root/bin4 [root@dyH ~]# echo 'export PATH=/usr/local/arm/4.3.2/bin/:$PATH' >> .

bashrc[root@dyH ~]# . .bashrc

6 [root@dyH ~]# echo $PATH/usr/local/arm/4.3.2/bin/:/usr/bin:/bin:/sbin:/usr/sbin:/sbin:/usr/sbin

:/root/bin� �7. arm-linux-gcc�

1 [root@dyH ~]# arm-linux-gccarm-none-linux-gnueabi-gcc: no input files� �

De-Yu Wang CSIE CYUT 187

Page 190: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.2. QT EMBEDDED CHAPTER 22. QTEMBEDDED PORTING

22.2 Qt embedded

1. x86_64 glibc.i686�[root@dyH ~]# yum install glibc.i686� �

2. qt�1 [root@dyH ~]# yum install qt� �

3. qt source

4. qt-embedded-linux-opensource-src�1 [root@dyH ~]# cd /usr/src

[root@dyH src]# wget http://ftp.heanet.ie/mirrors/trolltech/pub/qt/source/qt-embedded-linux-opensource-src-4.5.3.tar.gz� �

5. qt-embedded-linux-opensource-src�[root@dyH ~]# cd src

2 [dywang@dyH src]$ tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz[root@dyH src]# cd qt-embedded-linux-opensource-src-4.5.3

4 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# lsbin demos include LICENSE.GPL3 qmake

translations6 changes-4.5.3 doc INSTALL LICENSE.LGPL README

config.tests examples LGPL_EXCEPTION.txt mkspecs src8 configure FAQ.txt lib projects.pro tools� �

6. qmake mkspecs/qws/linux-arm-g++/qmake.conf�[root@dyH qt-embedded-linux-opensource-src-4.5.3]# cat mkspecs/qws/linux

-arm-g++/qmake.conf2 #

# qmake configuration for building with arm-linux-g++4 #

6 include(../../common/g++.conf)include(../../common/linux.conf)

8 include(../../common/qws.conf)

10 # modifications to g++.confQMAKE_CC = arm-linux-gcc

12 QMAKE_CXX = arm-linux-g++

De-Yu Wang CSIE CYUT 188

Page 191: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.2. QT EMBEDDED CHAPTER 22. QTEMBEDDED PORTING

QMAKE_LINK = arm-linux-g++14 QMAKE_LINK_SHLIB = arm-linux-g++

16 # modifications to linux.confQMAKE_AR = arm-linux-ar cqs

18 QMAKE_OBJCOPY = arm-linux-objcopyQMAKE_STRIP = arm-linux-strip

20load(qt_config)� �

7. Makefile�1 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# ll Makefile

ls: cannot access Makefile: No such file or directory3 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# ./configure -embedded

arm \-qt-zlib -qt-libpng -qt-gif -qt-libtiff -qt-libmng -qt-libjpeg -qt-

freetype -no-openssl5

Which edition of Qt do you want to use ?7

Type 'c' if you want to use the Commercial Edition.9 Type 'o' if you want to use the Open Source Edition.

11 o c o Open Source

13This is the Qt for Embedded Linux Open Source Edition.

15You are licensed to use this software under the terms of

17 the Lesser GNU General Public License (LGPL) versions 2.1.You are also licensed to use this software under the terms of

19 the GNU General Public License (GPL) versions 3.

21 Type '3' to view the GNU General Public License version 3.Type 'L' to view the Lesser GNU General Public License version 2.1.

23 Type 'yes' to accept this license offer.Type 'no' to decline this license offer.

25Do you accept the terms of either license? yes yes

27Creating qmake. Please wait...

29 gmake: Nothing to be done for `first'.......

31 ......

33 Qt is now configured for building. Just run 'gmake'.Once everything is built, you must run 'gmake install'.

35 Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.5.3-arm

37 To reconfigure, run 'gmake confclean' and 'configure'.� �De-Yu Wang CSIE CYUT 189

Page 192: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.3. QT EMBEDDED 程式 CHAPTER 22. QTEMBEDDED PORTING

8. Makefile qmakegmake install /usr/local/Trolltech/QtEmbedded-

4.5.3-arm�1 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# ll Makefile

-rw-r--r--. 1 root root 117564 Sep 8 08:13 Makefile3 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# gmake

[root@dyH qt-embedded-linux-opensource-src-4.5.3]# gmake install� �9. QtEmbedded�

[root@dyH qt-embedded-linux-opensource-src-4.5.3]# ll /usr/local/Trolltech/QtEmbedded-4.5.3-arm

2 total 28drwxr-xr-x. 2 root root 4096 Sep 7 22:37 bin

4 drwxr-xr-x. 18 root root 4096 Sep 7 22:37 demosdrwxr-xr-x. 25 root root 4096 Sep 7 22:37 examples

6 drwxr-xr-x. 14 root root 4096 Sep 7 22:36 includedrwxr-xr-x. 4 root root 4096 Sep 7 22:36 lib

8 drwxr-xr-x. 88 root root 4096 Sep 7 22:37 mkspecsdrwxr-xr-x. 6 root root 4096 Sep 7 22:36 plugins� �

22.3 Qt embedded程式

1. 程式 project�1 [root@dyH qt-embedded-linux-opensource-src-4.5.3]# cd /usr/local/

Trolltech/QtEmbedded-4.5.3-arm/demos/[root@dyH demos]# mkdir hello

3 [root@dyH demos]# cd hello� �2. 程式 hello.cpp�

1 [root@dyH hello]# vim hello.cpp

3 #include <QApplication>#include <QLabel>

5int main(int argc, char *argv[])

7 {QApplication app(argc, argv);

9 QLabel *label = new QLabel("Hello Qt!");label->show();

11 return app.exec();}� �

De-Yu Wang CSIE CYUT 190

Page 193: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.3. QT EMBEDDED 程式 CHAPTER 22. QTEMBEDDED PORTING

3. proj qmake PATH�[root@dyH hello]# qmake -project

2 -bash: qmake: command not found� �4. qmake PATH�

[root@dyH hello]# ls /usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin/qmake2 /usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin/qmake

[root@dyH hello]# echo "PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH" >> ~/.bashrc

4 [root@dyH hello]# . ~/.bashrc[root@dyH hello]# echo $PATH

6 /usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:/usr/local/arm/4.3.2/bin/:/usr/bin:/bin:/sbin:/usr/sbin:/sbin:/usr/sbin:/root/bin� �

5. qmake proj�1 [root@dyH hello]# qmake -project

[root@dyH hello]# qmake -project3 [root@dyH hello]# ll

total 85 -rw-r--r--. 1 root root 202 Sep 8 09:30 hello.cpp

-rw-r--r--. 1 root root 298 Sep 8 09:39 hello.pro� �6. Makefile�

[root@dyH hello]# qmake hello.pro2 [root@dyH hello]# ll

total 164 -rw-r--r--. 1 root root 202 Sep 8 09:30 hello.cpp

-rw-r--r--. 1 root root 298 Sep 8 09:39 hello.pro6 -rw-r--r--. 1 root root 6437 Sep 8 09:42 Makefile� �

7. make hello�[root@dyH hello]# make

2 arm-linux-g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../../mkspecs/qws/linux-arm-g++ -I. -I../../include/QtCore -I../../include/QtNetwork -I../../include/QtGui -I../../include -I. -I. -o hello.ohello.cpp

arm-linux-g++ -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib -o hello hello.o -L/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib -lQtGui -L/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib -lQtNetwork -lQtCore -lm -lrt -ldl -lpthread

De-Yu Wang CSIE CYUT 191

Page 194: C程式語言 - dywang.csie.cyut.edu.twdywang.csie.cyut.edu.tw/dywang/download/pdf/clanguage.pdf · 1.3. nat?!? chapter1. #n4s6 3~3ä (b) 1j@c /àr¹ ¹ j@c /àr« \ »> À/àii#nr«

22.4. TARGET BOARD CHAPTER 22. QTEMBEDDED PORTING

4 [root@dyH hello]# lltotal 28

6 -rwxr-xr-x. 1 root root 7717 Sep 8 09:44 hello-rw-r--r--. 1 root root 202 Sep 8 09:30 hello.cpp

8 -rw-r--r--. 1 root root 2716 Sep 8 09:44 hello.o-rw-r--r--. 1 root root 298 Sep 8 09:39 hello.pro

10 -rw-r--r--. 1 root root 6437 Sep 8 09:42 Makefile� �8. hello arm�

[root@dyH hello]# ./hello2 -bash: ./hello: cannot execute binary file

[root@dyH hello]# file hello4 hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically

linked (uses shared libs), for GNU/Linux 2.6.14, not stripped� �

22.4 target board

1. QtEmbedded target board�[root@dyH ~]# mkdir -p /media/targetboard/usr/local/Trolltech

2 [root@dyH ~]# cp -a /usr/local/Trolltech/QtEmbedded-4.5.3-arm /media/targetboard/usr/local/Trolltech� �

2. �[root@dyH ~]# vim /media/targetboard/root/armexport.sh

2$ export QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm

4 $ export PATH=$QTDIR/bin:$PATH$ export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH� �

3. armexport.sh�1 [root@dyH ~]# chmod a+x /media/targetboard/root/armexport.sh� �

4.

De-Yu Wang CSIE CYUT 192