[정보처리기사 실기] C언어 - (2)

2025. 3. 7. 13:45·📜 Certs

 

 1. 숫자 변환 함수 (atoi, atof, strtol 등)

정보처리기사 실기에서 문자열과 숫자 변환 문제도 출제될 가능성
C 언어에서는 문자열을 숫자로 변환할 때 atoi, atof, strtol, strtod 등의 함수를 사용합니다.

 atoi() - 문자열 → 정수 변환

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "1234";
    int num = atoi(str); // "1234" → 1234로 변환

    printf("변환된 정수: %d\n", num);  // 출력: 변환된 정수: 1234
    return 0;
}

📝 주의점

  • atoi()는 문자열에 숫자가 아닌 문자가 포함되면 예측할 수 없는 값을 반환할 수 있음.
  • "123abc" 같은 문자열을 변환하면 123까지만 변환됨.

 atof() - 문자열 → 실수 변환

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "3.14";
    double num = atof(str); // "3.14" → 3.14로 변환

    printf("변환된 실수: %.2f\n", num);  // 출력: 변환된 실수: 3.14
    return 0;
}

📝 주의점

  • atof()도 atoi()처럼 비숫자 문자가 포함되면 오류 발생 가능.

 strtol() - 더 강력한 문자열 → 정수 변환

C언어에서는 strtol()을 사용하면 문자열을 더욱 안전하게 변환할 수 있음.

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123abc";
    char *end;
    long num = strtol(str, &end, 10);  // 10진수로 변환

    printf("변환된 정수: %ld\n", num);  // 출력: 변환된 정수: 123
    printf("변환되지 않은 부분: %s\n", end);  // 출력: 변환되지 않은 부분: abc
    return 0;
}

✔ strtol()은 숫자가 아닌 부분을 따로 분리할 수 있어 실무에서도 많이 사용됨.


 2. C언어에서 &, %, *의 다양한 활용

이전 포스팅에서는 기본 연산자만 다뤘지만, 실전에서는 연산자의 다양한 쓰임새도 중요함!

 & 연산자 (주소 연산, 비트 연산)

1) 주소 연산자로서의 &

int a = 10;
int *p = &a;  // a의 주소를 p에 저장
printf("%p\n", p);  // a의 메모리 주소 출력

✔ 변수의 주소를 가져오는 용도로 사용

2) 비트 연산자로서의 &

int x = 6;   // 110 (2진수)
int y = 3;   // 011 (2진수)
printf("%d\n", x & y);  // 110 & 011 = 010 (2진수) → 2 출력

✔ 각 비트의 AND 연산 수행 (둘 다 1이면 1, 아니면 0)


 % 연산자 (나머지 연산)

✔ printf에서 %d, %f 등으로 사용되는 %는 서식 지정자이고,
✔ 10 % 3 = 1 처럼 사용되는 %는 나머지를 구하는 연산자임.

printf("%d\n", 10 % 3);  // 10을 3으로 나눈 나머지 = 1 출력

* 연산자 (곱셈과 포인터)

✔ *는 곱셈 연산자로도 사용되지만, 포인터에서 값 참조(역참조)하는 역할도 있음.

int a = 10;
int *p = &a;
printf("%d\n", *p);  // p가 가리키는 주소의 값(a) 출력 = 10

 3. 구조체 포인터 (-> 연산자)

정보처리기사 실기에서는 struct를 사용한 문제도 자주 출제됨
특히, 구조체 포인터를 사용할 때 -> 연산자를 알아두면 편리함.

#include <stdio.h>

struct Student {
    char name[20];
    int age;
    double score;
};

int main() {
    struct Student s1 = {"홍길동", 20, 95.5};
    struct Student *p = &s1;

    printf("이름: %s, 나이: %d, 점수: %.1f\n", p->name, p->age, p->score);
    return 0;
}

✔ p->name 은 (*p).name 과 같은 의미.
✔ 구조체 포인터를 다룰 때는 -> 연산자를 사용하면 편리함.


 4. 동적 메모리 할당 (malloc, free)

실무에서는 메모리를 동적으로 할당하는 법도 중요함

 malloc()을 이용한 메모리 동적 할당

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *p = (int *)malloc(sizeof(int) * 5);  // 정수 5개 크기의 메모리 할당
    if (p == NULL) {
        printf("메모리 할당 실패\n");
        return 1;
    }

    for (int i = 0; i < 5; i++) {
        p[i] = i + 1;
        printf("%d ", p[i]);
    }
    
    free(p);  // 메모리 해제
    return 0;
}

✔ malloc()을 사용하면 프로그램 실행 중에 필요한 만큼 메모리를 할당할 수 있음.
✔ free()를 사용하지 않으면 메모리 누수(memory leak) 발생 가능


 5. 함수 포인터 (콜백 함수 활용)

C언어에서는 함수의 주소를 저장하는 포인터도 사용 가능

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*funcPtr)(int, int);  // 함수 포인터 선언
    funcPtr = add;  // 함수 주소 저장

    printf("결과: %d\n", funcPtr(10, 20));  // add(10, 20) 호출과 동일
    return 0;
}

✔ funcPtr을 사용해서 add() 함수를 간접적으로 호출할 수 있음.

'📜 Certs' 카테고리의 다른 글

[정보처리기사 실기] C언어 - (1)  (0) 2025.03.04
2025년 상반기 자격증 플랜: 정보처리기사부터 AWS, Kubernetes까지  (1) 2025.01.17
'📜 Certs' 카테고리의 다른 글
  • [정보처리기사 실기] C언어 - (1)
  • 2025년 상반기 자격증 플랜: 정보처리기사부터 AWS, Kubernetes까지
hjwjo
hjwjo
백엔드 및 풀스택 개발에 관심 있는 초보 개발자의 개발 블로그입니다.
  • hjwjo
    Jeongwoo's Devlog
    hjwjo
  • 전체
    오늘
    어제
    • Devlog
      • 🗄️ Backend
        • Java
        • Spring
        • JPA
        • SQL
        • JSP
        • AWS
        • GCP
        • Linux
        • GitHub
        • ML
        • Security
      • 🖥️ Frontend
        • React
        • CSS
      • 🏅 Project
        • Hackathon
        • Team Project
      • 📊 Algorithm
        • BOJ
      • 📜 Certs
        • ADsP
        • SQLD
        • 정보처리기사
      • 📖
        • JavaScript
      • 일상
        • 면접후기
  • 블로그 메뉴

    • 홈
    • Devlog
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    데이터베이스
    백엔드
    정보처리기사
    java기초
    java
    DML
    정처기
    Spring
    springboot
    jsp
    백준
    AWS
    스프링부트
    ADsP
    http
    자바
    스프링
    SQL
    GCP
    쿼리
  • 최근 댓글

  • 최근 글

hjwjo
[정보처리기사 실기] C언어 - (2)
상단으로

티스토리툴바