분류 전체보기(1085)
-
Languague/C , C++ , C#
2021.02.11
[C언어/C++] 메모리 복사 memcpy 함수 사용법 & 예제
이미 생성한 객체들을 여러개 만들어야 할때 물론 여러번 만들어줄수도 있지만 번거로울 수 있습니다. 이런 경우에는 이미 만들어 놓은 객체들을 복사해서 사용하면 편리한데요. memcpy함수를 사용하여 메모리를 다른곳으로 복사할 수 있습니다. 이번 포스팅에서는 memcpy함수의 사용법에 대해 알아보도록 하겠습니다. memcpy 함수 사용법 #include //C언어 #include //C++ void* memcpy (void* dest, const void* source, size_t num) memcpy함수를 사용하기 위해서는 먼저 memcpy함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memcpy함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자값..
-
Languague/C , C++ , C#
2021.02.11
1
[C언어/C++] 메모리 초기화 memset 함수 사용법 & 예제
메모리를 할당받은 변수의 공간은 쓰레기 값들이 남아있습니다. 이러한 쓰레기값들을 없애기 위해서 사용할 수 있는 방법중 하나가 memset함수를 사용하는 것입니다. memset 함수를 사용하면 메모리의 내용을 원하는 크기만큼 특정값으로 설정할 수 있습니다. 특히 동적이나 정적으로 생성한 배열을 초기화할 때 자주 사용합니다. memset 함수 사용법 #include //C언어 #include //C++ void* memset(void* ptr, int value, size_t num); memset함수를 사용하기 위해서는 먼저 memset함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memset함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자 값 p..
-
Languague/C , C++ , C#
2021.02.10
1
[C언어] 동적 배열 생성하기 (1차원, 2차원)
동적 배열이란? 동적 배열은 heap을 이용하여 배열의 크기를 컴파일 단계가 아닌 실행시간에 가변적으로 바꿀 수 있는 배열을 말합니다 위 코드는 자바에서 동적배열을 생성하는 코드입니다. 하지만 이 코드를 그대로 C언어에서 생성해본다면 "식에 상수값이 있어야 합니다."라는 문구와 함께 에러가 나게 되는데요. 이렇듯 C언어에서는 Java와는 달리 변수를 배열의 길이에 오지 못하게 제한되어 있습니다. 그렇기 때문에 C언어에서는 동적 배열을 생성할때는 malloc함수를 활용하여 동적 메모리를 할당하는 방법을 써야 합니다. malloc함수에 대해 알고싶다면 아래 링크를 클릭해주세요. [C언어] 메모리 동적할당 (malloc, free) 함수 사용법 & 예제 1차원 동적 배열 생성하기 #include #includ..
-
Languague/C , C++ , C#
2021.02.09
3
[C언어] 메모리 동적할당 (malloc, free) 함수 사용법 & 예제
메모리의 동적 할당이란? "메모리를 동적 할당한다"라는 뜻은 컴퓨터 프로그램이 실행되는 도중인 런타임 도중에 사용할 메모리 공간을 할당하는 것을 말합니다. 동적 할당되는 메모리는 힙 영역에 생성되게 되며 컴파일 타임에 메모리의 크기가 결정되는 데이터 영역이나 스택 영역의 정적 메모리 할당과는 대조적인 개념입니다. malloc 함수 사용법 #include //malloc 함수가 포함된 헤더 파일 void* malloc(size_t size) malloc 함수를 사용하기 위해서는 malloc 함수가 포함되어 있는 헤더나 헤더를 포함시켜야 합니다. 인자 값 size_t : 동적으로 할당할 메모리의 크기 반환 값 성공시 할당한 메모리의 첫번째 주소 리턴, 실패시 NULL리턴 malloc 함수 사용 예제 #inc..
-
Languague/C , C++ , C#
2021.02.08
1
[C언어/C++] 구조체, 클래스의 패딩 바이트에 대하여
구조체, 클래스의 크기와 패딩바이트 구조체나 클래스의 크기는 어떻게 결정될까요? 구조체나 클래스 내부에 선언된 변수들의 크기로 결정된다고 생각하실 수 있는데 실제로 크기를 확인해보면 대부분 내부의 선언된 변수의 크기들보다 더 큰 크기의 공간이 할당되어 있습니다. 바로 패딩 바이트 때문에 그렇습니다. 패딩 바이트란 클래스나 구조체에 패딩 바이트를 추가하여 CPU 접근을 더 용이하게 해 주는 것을 말합니다. 자칫 공간 낭비일 수도 있는 불필요한 패딩 공간을 확보하면서 메모리의 크기를 맞추는 이유는 캐시 hit율을 높이고 CPU의 연산 횟수를 줄이기 위해서입니다. 패딩바이트 생성 예제 #include struct temp { int a; // 4byte int b; // 4byte char c; // 1byt..
-
Languague/C , C++ , C#
2021.02.07
[C언어/C++] 두개의 날짜/시간 간격 차이 계산하기 (difftime)
프로그래밍을 하다 보면 두개의 날짜나 시간의 간격을 계산해야할 경우가 생깁니다. C언어나 C++에서는 두개의 날짜나 시간의 간격은 difftime 함수를 사용하여 구할 수 있습니다. time 헤더 파일 포함 #include //C언어 #include //C++ 두 날짜나 시간의 간격을 구하는 difftime 함수는 C언어에서는 , C++에서는 경우에는 헤더 파일 안에 내장되어 있습니다. difftime 함수 사용법 double difftime(time_t time1, time_t time2); difftime 함수의 리턴값은 double형입니다. time1 : 이후 시간 time2 : 이전 시간 difftime 함수 사용 예제 시간 차이 구하기 #include #include #include void m..
-
Languague/C , C++ , C#
2021.02.06
[C언어/C++] 현재 날짜/시간 원하는 형태로 출력하기 (time, localtime)
개발을 하다 보면 현재 날짜나 현재시간이 필요할 경우가 생깁니다. 이번 포스팅에서는 C언어나 C++에서 현재 날짜, 현재시간을 어떻게 구할 수 있는지에 대해 포스팅하도록 하겠습니다. 1. time 헤더 파일 포함 #include //C언어 #include //C++ 현재시간을 구하는 time 함수는 C언어는 , C++ 일 경우에는 헤더 파일 안에 내장되어 있습니다. 2. time() 함수를 호출하여 현재의 날짜, 시간을 얻어 time_t 변수에 저장 time_t timer = time(NULL); time 함수는 time_t 결과값으로 타입을 리턴합니다. 결과값은 Unix 운영체제가 공식 출시한 1970년 1월 1일 0시 0분 0초를 기점으로 현재까지 흐른 시간을 초단위로 나타냅니다. 3. localti..
-
Languague/C , C++ , C#
2021.02.05
[C언어/C++] 랜덤(rand)함수 활용 아이템 가챠 프로그램 (난수 생성)
확률 게임 아이템 가챠 프로그램 #include #include #include #include #include struct Item { int num; char name[100]; }; int main(void) { struct Item item[100]; //아이템 배열 //배열 정보 입력 for (int i = 0; i < 60; i++) { item[i].num = i; strcpy_s(item[i].name, "일반등급 아이템"); } for (int i = 60; i < 90; i++) { item[i].num = i; strcpy_s(item[i].name, "레어등급 아이템"); } for (int i = 90; i < 99; i++) { item[i].num = i; strcpy_s(it..
-
Languague/C , C++ , C#
2021.02.05
1
[C언어/C++] 랜덤함수(rand, srand, time) 사용법 & 예제 (난수 생성)
C/C++로 개발을 하다 보면 종종 난수가 필요할 경우가 많습니다. C/C++에서는 이처럼 난수를 생성하는 rand() 함수와 srand() 함수가 있습니다. rand()함수는 난수의 생성 패턴을 한개로 설정하는 것이고 srand()함수는 난수의 생성 패턴을 여러개로 설정하는 차이가 있습니다. 이 함수들이 들어있는 헤더파일을 확인해보면 #define RAND_MAX 0x7fff라는 매크로 상수가 선언되어 있습니다. 즉 RAND_MAX는 0x7fff인데 이는 10진수로 32767입니다. 따라서 난수 의 범위는 0~32767가 되게 됩니다. 랜덤함수를 사용하여 난수 생성하기 헤더 파일 //C언어 #include //rand(), srand() #include //time() //C++ #include //r..
-
Languague/C , C++ , C#
2021.02.04
2
[C언어/C++] 키보드 입력 받기 (getch, kbhit) 함수 사용법 & 예제
C/C++를 통해서 개발할 때 키보드 입력을 받아야 할 경우가 있습니다. 주로 키보드로 입력을 받을 때는 C언어에서는 scanf, C++에서는 cin을 사용했지만, 입력된 키의 정보를 얻어 올 경우에는 getch()와 kbhit() 함수를 사용합니다. 그 이유는 scanf나 cin은 입력 시 버퍼를 사용하기 때문에 키 입력 후에 엔터키를 눌러야 입력이 마무리되지만 getch는 입력 버퍼를 사용하지 않기 때문에 키를 누름과 동시에 값이 입력된다는 점과 SPACE나 ENTER와 같은 특수 키도 입력이 가능하다는 점 때문입니다. 키보드의 입력을 받으면 데이터가 ASCII코드로 들어옵니다. 주요 아스키(ASCII) 코드 값 주요 아스키 코드값은 위와 같으니 개발 시 활용하시면 되겠습니다. 아스키코드로 표현할 수..
-
Languague/C , C++ , C# 2021.02.11[C언어/C++] 메모리 복사 memcpy 함수 사용법 & 예제 이미 생성한 객체들을 여러개 만들어야 할때 물론 여러번 만들어줄수도 있지만 번거로울 수 있습니다. 이런 경우에는 이미 만들어 놓은 객체들을 복사해서 사용하면 편리한데요. memcpy함수를 사용하여 메모리를 다른곳으로 복사할 수 있습니다. 이번 포스팅에서는 memcpy함수의 사용법에 대해 알아보도록 하겠습니다. memcpy 함수 사용법 #include //C언어 #include //C++ void* memcpy (void* dest, const void* source, size_t num) memcpy함수를 사용하기 위해서는 먼저 memcpy함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memcpy함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자값..
-
Languague/C , C++ , C# 2021.02.11 1[C언어/C++] 메모리 초기화 memset 함수 사용법 & 예제 메모리를 할당받은 변수의 공간은 쓰레기 값들이 남아있습니다. 이러한 쓰레기값들을 없애기 위해서 사용할 수 있는 방법중 하나가 memset함수를 사용하는 것입니다. memset 함수를 사용하면 메모리의 내용을 원하는 크기만큼 특정값으로 설정할 수 있습니다. 특히 동적이나 정적으로 생성한 배열을 초기화할 때 자주 사용합니다. memset 함수 사용법 #include //C언어 #include //C++ void* memset(void* ptr, int value, size_t num); memset함수를 사용하기 위해서는 먼저 memset함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memset함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자 값 p..
-
Languague/C , C++ , C# 2021.02.10 1[C언어] 동적 배열 생성하기 (1차원, 2차원) 동적 배열이란? 동적 배열은 heap을 이용하여 배열의 크기를 컴파일 단계가 아닌 실행시간에 가변적으로 바꿀 수 있는 배열을 말합니다 위 코드는 자바에서 동적배열을 생성하는 코드입니다. 하지만 이 코드를 그대로 C언어에서 생성해본다면 "식에 상수값이 있어야 합니다."라는 문구와 함께 에러가 나게 되는데요. 이렇듯 C언어에서는 Java와는 달리 변수를 배열의 길이에 오지 못하게 제한되어 있습니다. 그렇기 때문에 C언어에서는 동적 배열을 생성할때는 malloc함수를 활용하여 동적 메모리를 할당하는 방법을 써야 합니다. malloc함수에 대해 알고싶다면 아래 링크를 클릭해주세요. [C언어] 메모리 동적할당 (malloc, free) 함수 사용법 & 예제 1차원 동적 배열 생성하기 #include #includ..
-
Languague/C , C++ , C# 2021.02.09 3[C언어] 메모리 동적할당 (malloc, free) 함수 사용법 & 예제 메모리의 동적 할당이란? "메모리를 동적 할당한다"라는 뜻은 컴퓨터 프로그램이 실행되는 도중인 런타임 도중에 사용할 메모리 공간을 할당하는 것을 말합니다. 동적 할당되는 메모리는 힙 영역에 생성되게 되며 컴파일 타임에 메모리의 크기가 결정되는 데이터 영역이나 스택 영역의 정적 메모리 할당과는 대조적인 개념입니다. malloc 함수 사용법 #include //malloc 함수가 포함된 헤더 파일 void* malloc(size_t size) malloc 함수를 사용하기 위해서는 malloc 함수가 포함되어 있는 헤더나 헤더를 포함시켜야 합니다. 인자 값 size_t : 동적으로 할당할 메모리의 크기 반환 값 성공시 할당한 메모리의 첫번째 주소 리턴, 실패시 NULL리턴 malloc 함수 사용 예제 #inc..
-
Languague/C , C++ , C# 2021.02.08 1[C언어/C++] 구조체, 클래스의 패딩 바이트에 대하여 구조체, 클래스의 크기와 패딩바이트 구조체나 클래스의 크기는 어떻게 결정될까요? 구조체나 클래스 내부에 선언된 변수들의 크기로 결정된다고 생각하실 수 있는데 실제로 크기를 확인해보면 대부분 내부의 선언된 변수의 크기들보다 더 큰 크기의 공간이 할당되어 있습니다. 바로 패딩 바이트 때문에 그렇습니다. 패딩 바이트란 클래스나 구조체에 패딩 바이트를 추가하여 CPU 접근을 더 용이하게 해 주는 것을 말합니다. 자칫 공간 낭비일 수도 있는 불필요한 패딩 공간을 확보하면서 메모리의 크기를 맞추는 이유는 캐시 hit율을 높이고 CPU의 연산 횟수를 줄이기 위해서입니다. 패딩바이트 생성 예제 #include struct temp { int a; // 4byte int b; // 4byte char c; // 1byt..
-
Languague/C , C++ , C# 2021.02.07[C언어/C++] 두개의 날짜/시간 간격 차이 계산하기 (difftime) 프로그래밍을 하다 보면 두개의 날짜나 시간의 간격을 계산해야할 경우가 생깁니다. C언어나 C++에서는 두개의 날짜나 시간의 간격은 difftime 함수를 사용하여 구할 수 있습니다. time 헤더 파일 포함 #include //C언어 #include //C++ 두 날짜나 시간의 간격을 구하는 difftime 함수는 C언어에서는 , C++에서는 경우에는 헤더 파일 안에 내장되어 있습니다. difftime 함수 사용법 double difftime(time_t time1, time_t time2); difftime 함수의 리턴값은 double형입니다. time1 : 이후 시간 time2 : 이전 시간 difftime 함수 사용 예제 시간 차이 구하기 #include #include #include void m..
-
Languague/C , C++ , C# 2021.02.06[C언어/C++] 현재 날짜/시간 원하는 형태로 출력하기 (time, localtime) 개발을 하다 보면 현재 날짜나 현재시간이 필요할 경우가 생깁니다. 이번 포스팅에서는 C언어나 C++에서 현재 날짜, 현재시간을 어떻게 구할 수 있는지에 대해 포스팅하도록 하겠습니다. 1. time 헤더 파일 포함 #include //C언어 #include //C++ 현재시간을 구하는 time 함수는 C언어는 , C++ 일 경우에는 헤더 파일 안에 내장되어 있습니다. 2. time() 함수를 호출하여 현재의 날짜, 시간을 얻어 time_t 변수에 저장 time_t timer = time(NULL); time 함수는 time_t 결과값으로 타입을 리턴합니다. 결과값은 Unix 운영체제가 공식 출시한 1970년 1월 1일 0시 0분 0초를 기점으로 현재까지 흐른 시간을 초단위로 나타냅니다. 3. localti..
-
Languague/C , C++ , C# 2021.02.05[C언어/C++] 랜덤(rand)함수 활용 아이템 가챠 프로그램 (난수 생성) 확률 게임 아이템 가챠 프로그램 #include #include #include #include #include struct Item { int num; char name[100]; }; int main(void) { struct Item item[100]; //아이템 배열 //배열 정보 입력 for (int i = 0; i < 60; i++) { item[i].num = i; strcpy_s(item[i].name, "일반등급 아이템"); } for (int i = 60; i < 90; i++) { item[i].num = i; strcpy_s(item[i].name, "레어등급 아이템"); } for (int i = 90; i < 99; i++) { item[i].num = i; strcpy_s(it..
-
Languague/C , C++ , C# 2021.02.05 1[C언어/C++] 랜덤함수(rand, srand, time) 사용법 & 예제 (난수 생성) C/C++로 개발을 하다 보면 종종 난수가 필요할 경우가 많습니다. C/C++에서는 이처럼 난수를 생성하는 rand() 함수와 srand() 함수가 있습니다. rand()함수는 난수의 생성 패턴을 한개로 설정하는 것이고 srand()함수는 난수의 생성 패턴을 여러개로 설정하는 차이가 있습니다. 이 함수들이 들어있는 헤더파일을 확인해보면 #define RAND_MAX 0x7fff라는 매크로 상수가 선언되어 있습니다. 즉 RAND_MAX는 0x7fff인데 이는 10진수로 32767입니다. 따라서 난수 의 범위는 0~32767가 되게 됩니다. 랜덤함수를 사용하여 난수 생성하기 헤더 파일 //C언어 #include //rand(), srand() #include //time() //C++ #include //r..
-
Languague/C , C++ , C# 2021.02.04 2[C언어/C++] 키보드 입력 받기 (getch, kbhit) 함수 사용법 & 예제 C/C++를 통해서 개발할 때 키보드 입력을 받아야 할 경우가 있습니다. 주로 키보드로 입력을 받을 때는 C언어에서는 scanf, C++에서는 cin을 사용했지만, 입력된 키의 정보를 얻어 올 경우에는 getch()와 kbhit() 함수를 사용합니다. 그 이유는 scanf나 cin은 입력 시 버퍼를 사용하기 때문에 키 입력 후에 엔터키를 눌러야 입력이 마무리되지만 getch는 입력 버퍼를 사용하지 않기 때문에 키를 누름과 동시에 값이 입력된다는 점과 SPACE나 ENTER와 같은 특수 키도 입력이 가능하다는 점 때문입니다. 키보드의 입력을 받으면 데이터가 ASCII코드로 들어옵니다. 주요 아스키(ASCII) 코드 값 주요 아스키 코드값은 위와 같으니 개발 시 활용하시면 되겠습니다. 아스키코드로 표현할 수..