memcpy() 함수는 메모리 블록을 한 위치에서 다른 위치로 복사할 때 사용하는 표준 라이브러리 함수입니다. 복사 대상은 두 곳으로 나뉘는데, 하나는 소스(source), 다른 하나는 대상(destination)이며 각각 포인터로 지정합니다. 이 함수는 C 언어의 string.h 헤더 파일에 선언되어 있습니다.특히 memcpy()는 복사 과정에서 오버플로우(overflow) 검사를 수행하지 않는다는 점에 유의해야 합니다. 따라서 개발자가 직접 대상 버퍼의 크기가 충분한지 확인해야 안전하게 사용할 수 있습니다.memcpy() 함수의
C 언어에서 문자열의 길이를 구할 때 strlen()과 sizeof()를 혼동하는 경우가 많습니다. 두 기능은 비슷해 보이지만 동작 방식과 반환 결과가 완전히 다릅니다. 이번 글에서는 각각의 개념과 사용법을 예제와 함께 살펴보고, 두 기능의 핵심 차이점까지 정리해 드립니다.strlen() 함수란?strlen()은 C 언어의 표준 라이브러리 함수로, string.h 헤더 파일에 선언되어 있습니다. 이 함수는 문자열이나 문자 배열의 실제 길이, 즉 널 종료 문자(\0)를 만나기 전까지의 문자 개수를 구하는 데 사용됩니다.C 언어에서 s
ungetc() 함수는 스트림에서 이미 읽은 문자를 다시 입력 스트림에 되돌려(push back) 넣어, 해당 문자를 한 번 더 읽을 수 있도록 해주는 C 표준 라이브러리 함수입니다. C 언어에서 ungetc() 함수의 기본 구문은 다음과 같습니다. int ungetc(int character, FILE *stream) 매개변수 character − 입력 스트림에 되돌릴 문자입니다. stream − 파일 객체(FILE)를 가리키는 포인터입니다. 반환값 성공하면 되돌린 문자를 반환하고, 실패하면 EOF를 반환
C/C++의 atexit() 함수란?atexit() 함수는 프로그램이 정상적으로 종료된 이후에 특정 함수를 자동으로 호출하기 위해 사용됩니다. 이때 호출되는 함수는 매개변수 없이 실행되며, 종료 처리(termination) 함수는 프로그램 내 어느 위치에서든 등록할 수 있습니다. atexit() 함수는 stdlib.h 헤더 파일에 선언되어 있으며, 일반적으로 exit() 함수가 호출된 뒤 또는 main() 함수가 return으로 끝날 때 등록된 함수들이 실행됩니다.atexit() 함수의 문법int atexit(void (*funct
raise() 함수는 프로그램에 시그널(signal)을 전송하는 데 사용됩니다. 이 함수가 호출되면 미리 정의된 signal() 함수가 실행되어, 해당 시그널을 무시할지 아니면 등록된 시그널 핸들러(signal handler)를 호출할지 판단하게 됩니다. raise() 함수는 signal.h 헤더 파일에 선언되어 있으며, 실행에 성공하면 0을 반환하고 실패하면 0이 아닌 값(non-zero)을 반환합니다. raise() 함수의 문법 int raise(int signal) 매개변수 signal − 호출할 시그널의 번호입니
mbrlen() 함수는 C/C++에서 멀티바이트(multibyte) 문자의 길이를 구하는 데 사용되는 표준 라이브러리 함수입니다. 이 함수는 포인터가 가리키는 멀티바이트 문자의 크기를 바이트 단위로 계산하여 반환하며, 멀티바이트 문자열을 다룰 때 문자 경계를 정확하게 파악하는 데 유용합니다. mbrlen() 함수 문법 C 언어에서 mbrlen() 함수의 기본 문법은 다음과 같습니다. size_t mbrlen(const char* pointer, size_t size, mbstate_t* state); 매개변수 설명 pointer &
C 언어에서 콘솔(출력 화면)을 지우는 방법은 여러 가지가 있으며, 그중 대표적인 것이 clrscr() 함수입니다. 이 함수는 호출되는 즉시 화면을 깨끗하게 지워주며, conio.h 헤더 파일에 선언되어 있습니다.이 외에도 stdlib.h 헤더 파일에 선언된 system(cls)와 system(clear) 함수를 사용하는 방법도 있습니다. Windows 환경에서는 주로 system(cls)를, Linux나 macOS 같은 유닉스 계열 환경에서는 system(clear)를 사용합니다.C에서 콘솔을 지우는 기본 문법clrscr(); 또
isgraph() 함수란?isgraph() 함수는 전달된 문자가 그래픽 표현(graphical representation), 즉 화면에 실제로 출력 가능한 형태를 갖고 있는지 검사하는 C 라이브러리 함수입니다. 알파벳, 숫자, 특수문자처럼 눈으로 볼 수 있는 문자에는 참(0이 아닌 값)을 반환하고, 줄 바꿈이나 탭 같은 제어 문자 또는 공백 문자에는 0을 반환합니다. 이 함수는 ctype.h 헤더 파일에 선언되어 있습니다.문법(Syntax)C 언어에서 isgraph() 함수의 기본 문법은 다음과 같습니다.int isgraph(int
climits(limits.h)란 무엇인가?C 언어에서는 limits.h 헤더 파일이 사용되고, C++에서는 <climits> 헤더 파일이 사용됩니다. 두 헤더 파일에는 여러 가지 매크로가 정의되어 있으며, 이러한 한계값(limit)은 해당 자료형의 변수가 그 범위를 초과하는 값을 저장할 수 없음을 의미합니다.주요 매크로 목록limits.h 또는 <climits> 헤더 파일에 정의된 대표적인 매크로는 다음과 같습니다.CHAR_BITchar 타입의 비트 수CHAR_MINchar의 최솟값CHAR_MAXchar의 최
C언어에서 for나 while 같은 반복문을 사용하지 않고도 1부터 100까지의 숫자를 출력할 수 있습니다. 대표적인 방법으로는 재귀 함수(recursive function)를 활용하는 방법, goto 문을 사용하는 방법, 그리고 main() 함수 외부에 별도의 함수를 정의하여 호출하는 방법이 있습니다.그중 가장 널리 쓰이는 재귀 함수를 이용한 예제를 살펴보겠습니다.예제 코드#include<stdio.h> int number(int val) { if(val<=100) { printf(%d\t,v
포인터(pointer)는 메모리 주소를 저장하는 변수입니다. 그렇다면 와일드 포인터(wild pointer)는 무엇이 다를까요? 와일드 포인터 역시 메모리 주소를 저장하지만, 할당되지 않은 메모리 공간이나 이미 해제된 데이터 값을 가리킨다는 점에서 일반 포인터와 구별됩니다. 가장 흔한 경우는 포인터가 선언만 되고 초기화되지 않았을 때입니다. 초기화하지 않은 포인터는 쓰레기 값을 담고 있어 임의의(random) 메모리 위치를 가리키게 되며, 이러한 포인터에 접근하면 프로그램이 비정상적으로 동작하거나 세그먼트 오류(segmentati
C 언어에서는 별도의 임시 변수 없이도 단 한 줄의 코드만으로 두 변수의 값을 서로 교환(swap)할 수 있습니다. 이 글에서는 산술 연산자를 활용하는 방법과 XOR 비트 연산을 활용하는 방법, 총 두 가지 기법을 예제 코드와 함께 소개합니다. 예제 코드 #include <stdio.h> int main() { int a = 28, b = 8; a += b -= a = b - a; // 방법 1 printf(교환 후 : %d\t%d, a, b); (a ^= b), (b ^= a), (a
일반적으로 C/C++ 언어에서는 int, char, 문자열 처리 함수와 같은 내장 함수를 사용하기 위해 헤더 파일을 포함시킵니다. 대표적인 출력 함수인 printf() 역시 stdio.h 헤더 파일에 선언되어 있으며, 콘솔 화면에 다양한 형태의 데이터를 출력할 때 사용됩니다.그렇다면 헤더 파일을 포함하지 않고도 출력이 가능할까요? 정답은 가능입니다. 핵심은 함수를 직접 선언하는 것입니다. 다음은 C 언어에서 헤더 파일 없이 Hello World를 출력하는 예제입니다.예제 코드int printf(const char *text, ...
C/C++ strftime() 함수란?strftime() 함수는 날짜와 시간 정보를 사용자가 지정한 형식(format)의 문자열로 변환하는 데 사용되는 C 표준 라이브러리 함수입니다. 이 함수는 time.h 헤더 파일에 선언되어 있으며, 성공적으로 실행되면 복사된 문자열의 총 문자 수를 반환하고, 결과 문자열이 지정된 크기(size)보다 커서 들어가지 못하면 0을 반환합니다.strftime() 함수 문법size_t strftime(char *string, size_t size, const char *format, const stru
exit() 함수exit() 함수는 호출된 시점에서 이후의 모든 작업을 중단하고 프로그램을 즉시 종료할 때 사용합니다. exit()이 호출되면 해당 프로세스가 곧바로 종료되며, 이 함수는 stdlib.h 헤더 파일에 선언되어 있습니다. 또한 어떠한 값도 반환하지 않습니다.C 언어에서 exit()의 문법은 다음과 같습니다.void exit(int status_value);여기서 각 요소의 의미는 다음과 같습니다.status_value − 부모 프로세스에 반환되는 값입니다.다음은 C 언어에서 exit()를 사용한 예제입니다.예제#inc
C 언어에서 정적(static) 함수란 범위(scope)가 자신이 속한 객체 파일(object file)로 한정되는 함수를 말합니다. 즉, 정적 함수는 같은 객체 파일 내부에서만 호출할 수 있으며, 다른 소스 파일에서는 접근할 수 없습니다. 함수 이름 앞에 static 키워드를 붙이면 해당 함수를 정적 함수로 선언할 수 있습니다.이러한 특성을 이해하기 위해 먼저 반대 사례부터 살펴보겠습니다.정적 함수가 외부 파일에서 보이지 않는 이유두 개의 파일 first_file.c와 second_file.c가 있다고 가정해 보겠습니다.first
C 언어 pow() 함수란?pow() 함수는 밑(base) 값을 지정된 지수만큼 거듭제곱한 결과를 계산하는 데 사용됩니다. 이 함수는 두 개의 인수를 받으며, 밑값을 거듭제곱한 결과를 반환합니다. pow() 함수는 C 표준 라이브러리의 math.h 헤더 파일에 선언되어 있으므로, 사용하기 전에 반드시 해당 헤더 파일을 포함해야 합니다.함수 원형(문법)double pow(double val1, double val2);각 매개변수의 의미는 다음과 같습니다.val1 − 거듭제곱을 계산할 기준이 되는 밑값입니다.val2 − 지수(거듭제곱
C 언어에서 static 키워드를 사용하면 해당 변수, 데이터 멤버 또는 함수는 프로그램이 종료될 때까지 메모리에 할당되어 유지되며, 생명 주기가 프로그램 전체로 확장됩니다. 또한 정적(static) 함수는 클래스 이름을 통해 직접 호출할 수 있다는 특징이 있습니다.정적 변수의 특징정적 변수는 단 한 번만 초기화됩니다. 컴파일러는 프로그램이 끝날 때까지 이 변수를 메모리에 유지하며, 정적 변수는 함수 내부 또는 외부 어디에서든 정의할 수 있습니다. 다만 선언된 블록 내에서만 접근 가능한 지역적인 성격을 가집니다.가장 중요한 특징은
C 프로그래밍에서 문자를 입력받을 때 자주 사용되는 getchar(), fgetc(), getc() 함수는 모두 읽은 문자를 int 형태로 반환한다는 공통점이 있습니다. 이 세 함수의 동작 방식과 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.1. getchar() 함수getchar() 함수는 표준 입력 스트림인 stdin에서 한 문자를 읽어옵니다. 읽어들인 문자를 int 타입으로 반환하며, 오류가 발생하거나 파일의 끝에 도달하면 EOF(End Of File)를 반환합니다.예제 코드#include <stdio.h> i
C 언어에서 화면에 데이터를 출력할 때는 printf() 함수를, 사용자로부터 입력을 받을 때는 scanf() 함수를 사용합니다. 이 두 함수는 모두 라이브러리 함수로, 표준 입출력 헤더 파일인 stdio.h에 정의되어 있습니다.많은 초보 개발자들이 간과하는 부분 중 하나가 바로 이 함수들의 반환값입니다. 아래에서 printf()와 scanf() 함수가 어떤 값을 반환하는지 자세히 알아보겠습니다.printf() 함수의 반환값printf() 함수는 화면에 출력을 담당하는 함수입니다. 이 함수는 성공적으로 출력된 문자의 개수를 반환하며