728x90

코딩/C언어 16

C언어 동적 할당

동적 할당프로그램 실행 중에 메모리를 필요할 때 직접 요청해서 사용하는 것이다.- 보통 우리가 변수를 만들면 메모리 크기가 컴파일할 때 고정된다.int arr[10];그런데 실행할 때까지 몇 개가 필요할지 모를 수가 있다.실행 중에 메모리를 필요한 만큼 "동적으로" 빌리는 것이다. 2. 동적 할당 함수malloc 메모리를 '지정한 크기'만큼 빌려온다. (초기화 x)calloc 메모리를 '지정한 크기' 만큼 빌려오면서 '0'으로 초기화 까지 해준다.realloc 이미 빌린 메모리 크기를 '다시' 조정할 때 사용한다.free 빌린 메모리를 반납 할 때 사용한다.C의 malloc()은 음수를 받지 않는다. 하지만 음수를 넣을 수 는 있다.malloc()의 인자는 표준 C에서 다음과 같이 정의되어 있음void ..

코딩/C언어 2025.04.27

C언어 구조체(struct)

구조체란 ?구조체는 서로 다른 타입의 변수를 하나로 묶어서 쓰고 싶을 대 사용하는 사용자 정의 자료형기본 문법 예시 코드는 다음과 같습니다.struct Person { char name[20]; int age; float score;}이제 Person 이라는 타입을 만들어서 사람 정보를 묶어서 저장이 가능하다. 구조체를 사용하는 이유1. 서로 다른 타입의 데이터를 묶어서 관리ex) 학생 정보를 저장한다고 했을 때, 이름은 문자열, 나이는 정수, 성적은 실수 입니다.char name[30];int age;float grade;학생이 1명일 때는 괜찮지만, 100명, 1000명일 경우에는 엄청 복잡해 지게 됩니다.그래서 구조체를 묶어 사용을 하게 되면 깔끔하게 관리가 가능합니다.struct Stu..

코딩/C언어 2025.04.26

C언어 포인터

포인터란?메모리 주소를 저장하는 변수이다. 어떤 변수의 값을 직접 저장하지 않고, 그 변수가 저장된 위치(주소)를가리킨다.예제 소스코드#include int main() { int a = 10; int *p; // 포인터 선언 p = &a; // 변수 a의 주소를 p에 저장 printf("a의 값: %d\n", a); printf("a의 주소: %p\n", &a); printf("p에 저장된 값(주소): %p\n", p); printf("p가 가리키는 값: %d\n", *p); // 역참조 return 0;}결과*p는 p가 가리키는 주소의 값에 접근하는 걸 의미한다. (역참조) 2. 포인터를 이용한 값 변경출력함수에 값을 넘길 때 포인터를 사용하면 원본 값을 수..

코딩/C언어 2025.04.25

C언어 45분 일찍 설정하는 로직

#include  int main() {     int H, M;     scanf("%d %d", &H, &M);     M -= 45; // 45분 일찍 설정     if (M         M += 60;         H--; // 한 시간 줄이기         if (H             H = 23;         }     }     printf("%d %d\n", H, M);     return 0; }  1. 현재 시간에서 45분 빼기2. 만약 분이 음수가 되면 한시간을 줄이고, 분을 60분 더해서 양수로 바꿈3. 시간이 음수가 되면 23시로 변경 (너무어렵다 )

코딩/C언어 2025.03.11

C언어 배열(array)

목차1. C언어 배열2. 배열 선언3. 1차원 배열4. 2차원 배열 1. C언어 배열- C언어에서 배열은 동일한 데이터 타입의 변수들을 연속적으로 저장할 수 있는 데이터 구조입니다.- 배열은 인덱스를 사용하여 각 요소에 접근할 수 있으며, 인덱스는 0부터 시작합니다.- 배열은 다양한 프로그래밍 작업에 활용되고, 특히 반복적인 작업을 수행할 때 유용합니다.- 배열 이름(arr)은 사실상 배열의 첫 번째 요소를 가리키는 포인터다.- arr[i] == *(arr + i)는 같은 의미입니다.-> 즉 포인터 연산을 통해서 배열을 넘나들 수 있다는 걸 꼭 알아야합니다. 2. 배열 선언배열의 형식은 다음과 같습니다.자료형 변수명[개수];자료형 : 배열에 저장할 자료의 형을 지정합니다.변수명 : 사용할 배열의 이름입니..

코딩/C언어 2024.05.06

C언어 fgets 함수

fgets 함수는 파일에서 문자열을 읽어들이는 함수입니다. 파일 포인터, 읽어들일 문자열 버퍼, 그리고 최대 읽을 문자 수를 인자로 받습니다. 문자열을 읽어들일 때 개행문자 ('\n') 까지 포함하여 읽어들이며, 지정된 최대 문자수에 도달하면 읽기를 중지합니다.  목차1. fgets 함수의 구조2. fgets 함수의 특징3. fgets 함수 사용 예시4. fgets 함수의 보안성 1. fgets 함수의 구조char *fgets (char *str, int num, FILE *stream);"str" : 읽은 문자열을 저장할 버퍼의 포인터입니다."num" : 읽을 최대 문자 수입니다."stream" : 입력 스트림을 가리키는 파일 포인터입니다.fgets 함수는 다음과 같이 동작합니다1. stream에서 최..

코딩/C언어 2024.05.04

C언어에서의 포맷 스트링 (Format String) 취약점

"printf"와 같은 함수를 사용할 때 주의해야 할 보안 취약점 중 하나가 포맷 문자열 취약점이다.이 취약점은 프로그램이 사용자 입력을 적절히 검증하지 않고 포맷 문자열 함수(printf, fprintf 등)에 전달할 때 발생하는 보안 문제입니다. 이러한 상황에서는 사용자가 의도하지 않은 형식 지정자를 입력하여 프로그램이 비정상적으로 동작하거나 보안 문제가 발생할 수 있다. C언어에서의 포맷 스트링 (Format String) 취약점아래의 코드를 살펴봅시다.#include int main(){ char buf[100]; printf("이름: "); scanf("%s", buf); printf(buf); // 여기서 취약점이 발생. return 0;}"printf" 함수는 포맷 문자열을 사용하여 입력된..

코딩/C언어 2024.04.30

#7 C언어 main 함수

C언어에서 int main() 은 프로그램의 시작점을 나타내는 함수 입니다. 이 함수는 C프로그램이 실행될 때 가장 먼저 호출되며, 프로그램의 실행 흐름을 지시합니다.   목차1. main 함수란?2. main 함수 기본 형태3. 예시 코드  main 함수란?C언어에서 main 함수는 프로그램의 시작점입니다. 모든 C 프로그램은 실행될 때 main 함수에서부터 시작됩니다. main 함수 기본 형태int main() { // 프로그램 실행 내용 return 0;}int : 함수의 반환 타입을 나타냅니다. 프로그램의 실행이 정상적으로 완료되었을 때는 보통 0을 반환하므로 "int" 타입입니다.main : 함수의 이름입니다. C 프로그램에서는 프로그램의 시작점을 나타내는 함수의 이름으로 관례적으로 "ma..

코딩/C언어 2024.04.20
728x90