C Programming Language/C

C์–ธ์–ด ๋ฌธ์ž์™€ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ธฐ

567Rabbit 2024. 7. 10. 21:32

 

๋ฌธ์ž์—ด(string) : ๋ฌธ์ž๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐœ ๋ชจ์ธ ๊ฒƒ

 

 

 

๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ž€?

-๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

 

 

 

๋ฌธ์ž์—ด ๋ณ€์ˆ˜์˜ ํŠน์ง•

 

(1) ํ•˜๋‚˜์˜ ๋ฌธ์ž๋Š” charํ˜• ๋ณ€์ˆ˜๋กœ ์ €์žฅ  ex) H

 

(2) ๋ฌธ์ž์—ด์€ charํ˜• ๋ฐฐ์—ด๋กœ ์ €์žฅ          ex) HELLO\0

 

(3) NULL ๋ฌธ์ž๋Š” ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค   ex) \0

 

(4) ๋ฌธ์ž์—ด์€ ์–ด๋””์„œ ์ข…๋ฃŒ๋˜๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ‘œ์‹œ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

     ํ‘œ์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

๋ฌธ์ž ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐํ™”

 

 

 

๋ณดํ†ต, char str[4] = "abc"; ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋งŽ์ด ์“ด๋‹ค.

 

 

 

 

๋ฌธ์ž์—ด์˜ ์ถœ๋ ฅ

c, h
๋‹ซ๊ธฐ
char str[] = "abc"; printf("%s", str); //abc๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

์˜ˆ์ œ

c, h
๋‹ซ๊ธฐ
#include <stdio.h> #include <string.h> int main(void) { โ€‹โ€‹โ€‹โ€‹char str1[6] = "Seoul"; // "Seoul" โ€‹โ€‹โ€‹โ€‹char str2[3] = {'i' , 's' , '\0'}; // "is" โ€‹โ€‹โ€‹โ€‹char str3[25] = "the capital city of Korea."; โ€‹โ€‹โ€‹โ€‹printf("%s %s%s\r", str1, str2, str3); // ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ํ•ฉ์ณ์„œ ์ถœ๋ ฅ โ€‹โ€‹โ€‹โ€‹return 0; โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹//Seoul is the capital city of Korea. }

 

 

 

 

๋ฌธ์ž์—ด์„ copyํ•˜๋Š” ์˜ˆ์ œ

c, h
๋‹ซ๊ธฐ
#include <stdio.h> int main(void) { โ€‹โ€‹โ€‹โ€‹char src[] = "The worst things to eat before you sleep"; // ์›๋ณธ ๋ฌธ์ž์—ด โ€‹โ€‹โ€‹โ€‹char dst[100]; // ๋ณต์‚ฌ๋œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•  ๋ฐฐ์—ด โ€‹โ€‹โ€‹โ€‹int i; โ€‹โ€‹โ€‹โ€‹printf("์›๋ณธ ๋ฌธ์ž์—ด=%s\n", src); // ์›๋ณธ ๋ฌธ์ž์—ด ์ถœ๋ ฅ โ€‹โ€‹โ€‹โ€‹// src ๋ฌธ์ž์—ด์„ dst๋กœ ๋ณต์‚ฌ โ€‹โ€‹โ€‹โ€‹for (i = 0; src[i] != '\0'; i++) { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹dst[i] = src[i]; โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹dst[i] = '\0'; // ๋งˆ์ง€๋ง‰์— NULL ๋ฌธ์ž ์ถ”๊ฐ€ โ€‹โ€‹โ€‹โ€‹printf("๋ณต์‚ฌ๋œ ๋ฌธ์ž์—ด=%s\n", dst); // ๋ณต์‚ฌ๋œ ๋ฌธ์ž์—ด ์ถœ๋ ฅ โ€‹โ€‹โ€‹โ€‹return 0; }

 

 

 

 

 

๋ฌธ์ž์—ด ๊ธธ์ด ๊ณ„์‚ฐ ์˜ˆ์ œ

c, h
๋‹ซ๊ธฐ
#include <stdio.h> int main(void) { โ€‹โ€‹โ€‹โ€‹char str[30] = "C language is easy"; // ์›๋ณธ ๋ฌธ์ž์—ด โ€‹โ€‹โ€‹โ€‹int i = 0; // ์ธ๋ฑ์Šค ๋ณ€์ˆ˜ โ€‹โ€‹โ€‹โ€‹// ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” NULL ๋ฌธ์ž๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต โ€‹โ€‹โ€‹โ€‹while (str[i] != '\0') { โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹i++; // ์ธ๋ฑ์Šค๋ฅผ ์ฆ๊ฐ€ โ€‹โ€‹โ€‹โ€‹} โ€‹โ€‹โ€‹โ€‹printf("๋ฌธ์ž์—ด\"%s"\์˜ ๊ธธ์ด๋Š” %d์ž…๋‹ˆ๋‹ค.\n", str, i); โ€‹โ€‹โ€‹โ€‹return 0; โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹// ๋ฌธ์ž์—ด "C language is easy"์˜ ๊ธธ์ด๋Š” 18์ž…๋‹ˆ๋‹ค. }

 

 

 

 

 

๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ

 

- ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

 

  1. ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ (Text Segment):
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • ์ด ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ
    • ์ƒ์ˆ˜ ๋ฌธ์ž์—ด์ด๋‚˜ ์ƒ์ˆ˜ ๋ฐ์ดํ„ฐ๋„ ์ด ์˜์—ญ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ (Data Segment):
    • ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ์™€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด ์˜์—ญ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅ
    • ์ดˆ๊ธฐํ™”๋œ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ๋˜๊ณ , ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๋Š” BSS(Block Started by Symbol) ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ๋จ
  3. ํž™ (Heap):
    • ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • malloc, calloc, realloc ๋“ฑ์˜ ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด ์˜์—ญ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅ
  4. ์Šคํƒ (Stack):
    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ถ”๊ฐ€๋˜๊ณ , ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ ํ•ด๋‹น ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ œ๊ฑฐ๋จ
    • ์ด ์˜์—ญ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋‘ ๊ฐ€๋Šฅ

 

 

๋ฌธ์ž์—ด ์ƒ์ˆ˜

char *p = "HelloWorld";

 

 

- ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ(๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)

- ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ(๊ฐ’์„ ์ฝ๊ธฐ๋งŒ ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)

 

 

 

์˜ˆ์ œ

c, h
๋‹ซ๊ธฐ
#include <stdio.h> int main(void) { โ€‹โ€‹โ€‹โ€‹char *p = "HelloWorld"; โ€‹โ€‹โ€‹โ€‹printf("%s /n", p); โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹p = "Welcome to C World!"; //๊ฐ€๋Šฅ โ€‹โ€‹โ€‹โ€‹printf("%s /n", p); โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹p = "Goodbye"; // p ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅ โ€‹โ€‹โ€‹โ€‹printf("%s /n", p); โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹// p์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค โ€‹โ€‹โ€‹โ€‹// p[0] = 'a' โ€‹โ€‹โ€‹โ€‹// aoobye๋กœ ๋ฐ”๋€Œ์ง€ ์•Š๊ณ , ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋‹ค๋ฅธ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค โ€‹โ€‹โ€‹โ€‹ โ€‹โ€‹โ€‹โ€‹return 0; }

 

 

 

 

 

ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜

 

 

gets_s()  :  int getchar(void)

 

ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜

์‚ฌ์šฉ ์˜ˆ: int c = getchar();

ํ‘œ์ค€ ์ž…๋ ฅ(ํ‚ค๋ณด๋“œ)์—์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ฝ์–ด์˜จ๋‹ค

๋ฌธ์ž์—ด ํ•จ์ˆ˜์ด์ง€๋งŒ int์ž„์„ ์ฃผ์˜ํ•œ๋‹ค

c, h
๋‹ซ๊ธฐ
char buf[100]; gets_s(buf, 100); //ํ•ดํ‚น ์œ„ํ—˜์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ์ด์ฆˆ๋ฅผ ์ž…๋ ฅํ•˜๋„๋ก gets_s ์–ธ๋”๋ฐ” s๊ฐ€ ์ƒ๊น€ puts(buf);

 

 

 

puts()  :  void putchar(int c)

 

๋ณ€์ˆ˜ c์— ์ €์žฅ๋œ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ

์‚ฌ์šฉ ์˜ˆ: putchar(c);

ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ํ‘œ์ค€ ์ถœ๋ ฅ(ํ™”๋ฉด)์— ์ถœ๋ ฅ

 

 

 

int _getch(void)

 

ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜(๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)

์‚ฌ์šฉ ์˜ˆ: int c = _getch();

์ฃผ๋กœ ํ‚ค ์ž…๋ ฅ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ

๋ฌธ์ž์—ด ํ•จ์ˆ˜์ด์ง€๋งŒ  int์ž„์„ ์ฃผ์˜ํ•œ๋‹ค

 

 

 

void _putch(int c)

 

๋ณ€์ˆ˜ c์— ์ €์žฅ๋œ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ(๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)

์‚ฌ์šฉ ์˜ˆ: _putch(c);

์ฝ˜์†”์— ๋ฌธ์ž๋ฅผ ๋ฒ„ํผ๋ง ์—†์ด ์ฆ‰์‹œ ์ถœ๋ ฅ

 

 

 

 

 

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜

 

 

int scanf("%c", &c)

 

์‚ฌ์šฉ ์˜ˆ: char c; scanf("%c", &c);

ํ‘œ์ค€ ์ž…๋ ฅ์—์„œ ํ˜•์‹ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

%c ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ฝ๋Š”๋‹ค

ํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

int printf("%c", c)

 

๋ณ€์ˆ˜ c์— ์ €์žฅ๋œ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ

์‚ฌ์šฉ ์˜ˆ: char c = 'A'; printf("%c", c);

ํ˜•์‹ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์ค€ ์ถœ๋ ฅ์— ์ถœ๋ ฅ

%c ํฌ๋งท์„ ์‚ฌ์šฉ์‹œ, ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ

ํ•˜์ง€๋งŒ printf ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

 

 

 

๋ฒ„ํผ๋ง(Buffering):

 

๋ฒ„ํผ๋ง์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ • ํฌ๊ธฐ๋งŒํผ ๋ชจ์•„๋†“๊ณ  ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ„ํผ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

 

์—”ํ„ฐํ‚ค(\n)๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๋ชจ๋“  ๋ฒ„ํผ๋กœ ์˜จ ๋ฌธ์ž๋“ค์ด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ„๋‹ค.

=> ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์—”ํ„ฐํ‚ค๋ฅผ ์ณ์•ผ๋งŒ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๋งŽ๋‹ค : ๋ฒ„ํผ๋ฅผ ์“ฐ๋Š” ๊ฒƒ๋“ค.

 

_getch์™€ _putch ํ•จ์ˆ˜๋Š” ๋ฒ„ํผ๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ์ด ์ฆ‰์‹œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ด ํ•จ์ˆ˜๋“ค์€ ์ฃผ๋กœ ์‹ค์‹œ๊ฐ„ ์ž…๋ ฅ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค : ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค