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"; ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋งŽ์ด ์“ด๋‹ค.

 

 

 

 

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

char str[] = "abc";
printf("%s", str);

//abc๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

์˜ˆ์ œ

#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ํ•˜๋Š” ์˜ˆ์ œ

#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;
}

 

 

 

 

 

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

#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";

 

 

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

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

 

 

 

์˜ˆ์ œ

#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์ž„์„ ์ฃผ์˜ํ•œ๋‹ค

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