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 |