분류 전체보기
C에서 사용자 입력을 받아 파일에 저장하는 방법 - scanf, fopen, fprintf 사용법
C에서 사용자 입력을 받아 파일에 저장하는 방법 - scanf, fopen, fprintf 사용법
2025.04.02C에서 사용자 입력을 받아 파일에 저장하는 방법C에서 사용자 입력을 받아 파일에 저장하는 방법을 배우기 전에, 먼저 입력을 받는 함수들이 어떻게 작동하는지 살펴보자. get_int나 get_string 같은 함수는 내부적으로 scanf를 활용하는데, 이를 직접 구현해보면서 메모리 구조와 파일 출력 방법을 익혀보자(:핵심 개념scanffopenfprintffclose 메모리 구조 복습그전에, C 프로그램의 메모리 구조를 다시 한번 정리해봐야지ㅎㅎ!코드 영역: 실행될 프로그램의 바이너리 코드가 저장되는 공간데이터 영역 (글로벌 영역): 전역 변수 등이 저장되는 공간힙 (Heap): malloc 등으로 동적으로 할당된 메모리가 저장되는 공간 (아래로 확장됨)스택 (Stack): 함수 호출 시 로컬 변수 등이 ..
스택과 힙의 차이점 이해하기: 포인터를 이용한 메모리 교환 방법
스택과 힙의 차이점 이해하기: 포인터를 이용한 메모리 교환 방법
2025.03.30메모리 교환, 스택, 힙: 이해하기 쉽게 정리한 메모리 구조들어가기 전에프로그래밍에서 메모리 관리는 매우 중요한 부분이다. 간단히 말해, 컴퓨터가 프로그램을 실행할 때 데이터를 어떻게 저장하고, 필요할 때마다 그 데이터를 어떻게 사용할지에 대한 문제인데, 메모리 구조를 제대로 이해하면 효율적인 프로그램을 작성할 수 있다.먼저, 메모리에서 값을 교환하려면 어떻게 해야 할지 상상해 보자. 예를 들어, 사이다와 콜라가 들어 있는 두 컵을 바꿔 담고 싶다면 새로운 컵을 잠시 준비해서 그 안에 값을 담는 과정이 필요하다. 그럼 메모리에서도 값을 교환할 때도 이와 비슷한 방식으로 작업을 할 수 있을까? 답은 포인터를 활용하면 된다는 것이다. 1. 스택(Stack)과 힙(Heap)의 개념스택 (Stack)스택은 자동..
C 언어 동적 메모리 할당 쉽게 이해하기 | malloc, free, valgrind 활용
C 언어 동적 메모리 할당 쉽게 이해하기 | malloc, free, valgrind 활용
2025.03.30메모리 할당과 해제: 프로그래머가 꼭 알아야 할 개념 컴퓨터에서 프로그램을 실행하면 메모리가 필요하다. 그런데 프로그램이 실행되는 동안 사용한 메모리를 제대로 해제하지 않으면 어떻게 될까? 제한된 메모리를 낭비하게 되어 결국 프로그램이 비효율적으로 동작하거나 심한 경우 시스템 전체에 영향을 줄 수 있다. 이런 문제를 방지하려면 동적 메모리 할당과 해제의 개념을 정확히 이해해야 한다.이번 글에서는 malloc을 사용하여 메모리를 할당하는 방법과 free를 사용하여 할당된 메모리를 해제하는 방법을 배워보자. (ps. 메모리 누수와 버퍼 오버플로우 같은 문제를 방지하는 방법도 함께 기록해야지🧚🏻.) 메모리 할당과 해제란?C 언어에서는 프로그램 실행 중 필요한 메모리를 동적으로 할당할 수 있다. 이때 사용하..
C 언어에서 문자열 복사하는 방법: malloc과 for문을 활용한 정확한 복사
C 언어에서 문자열 복사하는 방법: malloc과 for문을 활용한 정확한 복사
2025.03.30C 언어에서 문자열 복사하는 방법: malloc과 for문 사용하기문자열 복사, 단순히 복사만 하면 되지 않나?C 언어에서 문자열을 복사한다고 할 때, 단순히 문자열을 다른 변수에 대입하는 방식은 예기치 않은 결과를 초래할 수 있다. 이를 잘 이해하려면 먼저 C 언어에서 문자열이 어떻게 저장되는지를 알아야 한다. C 언어에서는 문자열이 메모리 주소에 저장되며, 각 문자열은 널 종료 문자(\0)로 끝난다. 이 때문에 단순히 문자열을 대입하면, 주소만 복사되고 실제 문자열의 내용은 복사되지 않는다.예시 코드#include #include #include int main(void){ string s = get_string("s: "); string t = s; t[0] = toupper(t[0..
C 언어에서 string이 없는 이유 – 문자열과 포인터의 관계
C 언어에서 string이 없는 이유 – 문자열과 포인터의 관계
2025.03.30C 언어에서 문자열과 포인터 이해하기C 언어에서는 문자열을 다룰 때 string이라는 자료형을 사용하는 것처럼 보이지만, 사실 C에는 string이라는 자료형이 존재하지 않는다. 대신, 문자열은 문자의 배열로 표현되며, 이 배열을 가리키는 포인터를 사용해 문자열을 저장하고 접근할 수 있다. 이번 글에서는 문자열이 메모리에 어떻게 저장되는지, 그리고 이를 다루는 포인터의 개념을 쉽게 이해할 수 있도록 기록해보고자 한다(: 문자열과 포인터의 관계예제 코드를 살펴보자.#include int main(void){ char *s = "EMMA"; printf("%s\n", s);}이 코드에서 s는 문자열의 첫 번째 문자를 가리키는 포인터다. 즉, s는 "EMMA"라는 문자열이 저장된 메모리 주소를 저장..
인터넷 속도 계산법 : 1Gbps, 100Mbps 다운로드 속도 비교
인터넷 속도 계산법 : 1Gbps, 100Mbps 다운로드 속도 비교
2025.03.28비트(Bit)와 바이트(Byte)의 차이와 Mbps, Gbps의 개념 쉽게 이해하기인터넷 속도를 확인할 때 흔히 "100Mbps", "1Gbps" 같은 단위를 보게 된다. 하지만 Mbps와 MB/s의 차이를 헷갈려 하는 경우가 많다. 또한 비트(bit)와 바이트(byte)의 개념을 정확히 이해하지 못하면 다운로드 속도를 잘못 계산할 수도 있다. 이번 글에서는 비트와 바이트의 차이, Mbps와 Gbps가 의미하는 바, 그리고 인터넷 속도를 정확하게 해석하는 방법을 쉽게 설명한다.비트(Bit)와 바이트(Byte)의 차이1. 비트(Bit)란?비트(bit)는 데이터를 나타내는 가장 작은 단위다. 0과 1로 표현되는 이진수이며, 컴퓨터가 데이터를 처리할 때 기본적으로 사용하는 단위다.2. 바이트(Byte)란?바이..
C 프로그래밍에서 16진수와 메모리 주소 이해하기: 포인터와 역참조까지
C 프로그래밍에서 16진수와 메모리 주소 이해하기: 포인터와 역참조까지
2025.03.27현재시각 새벽 4시. 오늘은 C 프로그래밍에서 중요한 개념인 메모리 주소와 16진수에 대해 기록해보고자 한다(: 처음 배우는 사람이라면 조금 어려울 수 있지만, 차근차근 따라오면 누구나 이해할 수 있다. 이제부터 하나씩 풀어보자.1. 16진수란 무엇일까?16진수(Hexadecimal)는 우리가 평소 사용하는 10진수(Decimal)나 2진수(Binary)와는 조금 다른 숫자 체계다. 컴퓨터는 사실 0과 1만을 이해할 수 있기 때문에, 우리가 하는 모든 작업은 결국 0과 1로 변환되어야 한다. 그런데 2진수는 너무 길어서 다루기 불편하다. 그래서 2진수를 간편하게 표현할 수 있는 16진수가 많이 사용된다.10진수는 우리가 일반적으로 사용하는 숫자 체계다. 예를 들어, 10진수에서 10은 10을 의미한다.2..
Fond / Fond of : 사용법과 다양한 예문 정리
Fond / Fond of : 사용법과 다양한 예문 정리
2025.03.26"Fond"는 애정이나 좋아하는 감정을 표현할 때 사용되는 단어로, "fond of"와 단독으로 사용되는 경우가 있다. "Fond of"는 구체적인 대상을 좋아하거나 애정을 표현할 때 쓰이고, "fond"는 추상적인 감정이나 기억을 나타낼 때 사용된다. 이 두 가지의 차이를 명확하게 구별해보자(: "Fond of" 사용법"Fond of"는 구체적인 사람, 사물, 활동 등에 대한 애정을 표현할 때 사용된다.ex.I’m fond of chocolate.나는 초콜릿을 좋아한다.She is fond of her pets.그녀는 자신의 애완동물을 좋아한다.He’s fond of reading books.그는 책 읽는 것을 좋아한다.They are fond of going to the beach.그들은 해변에 가..
병합 정렬(Merge Sort) : 효율적인 정렬 알고리즘 배우기
병합 정렬(Merge Sort) : 효율적인 정렬 알고리즘 배우기
2025.03.25병합 정렬이란?지난 강의에서 다양한 정렬 알고리즘을 배웠다. 선택 정렬, 버블 정렬 등은 이해하기 쉽지만, 실행 시간이 상대적으로 오래 걸린다. 이번에는 보다 효율적인 정렬 방법인 병합 정렬(Merge Sort) 에 대해 알아보자.병합 정렬은 분할 정복(Divide and Conquer) 기법을 활용하는 정렬 알고리즘이다. 데이터를 반씩 나누고, 더 이상 나눌 수 없을 때까지 나눈 후, 다시 정렬하면서 합쳐나간다. 이러한 방식 덕분에 시간 복잡도가 O(n log n) 으로, 이전에 배운 선택 정렬(O(n²))보다 훨씬 빠르다. 병합 정렬의 동작 방식 🔍1. 데이터 분할하기정렬할 숫자들이 있다고 가정하자.7 4 5 2 6 3 8 1이 숫자들을 반으로 나눈다.7 4 5 2 | 6 3 8 1반으로 나눈 데이..
condemn 뜻과 활용법 - 강하게 비난하다, 유죄를 선고하다
condemn 뜻과 활용법 - 강하게 비난하다, 유죄를 선고하다
2025.03.25condemn은 동사로 사용되며, 강하게 반대하다, 비난하다, 유죄를 선고하다는 의미를 가진다. 이 단어는 도덕적으로 잘못된 행동이나 특정 상황에 대한 강한 부정적 의견을 표현할 때 사용되며- 법적인 맥락에서는 유죄를 선고하는 의미로 쓰일 수도 있다(:condemn의 뜻강하게 반대하거나 비난하다: 특정 행동이나 정책, 사고방식 등에 대해 강하게 반대하는 의미를 가진다.유죄를 선고하다: 법적인 맥락에서 특정 범죄에 대해 법원이 판결을 내릴 때 사용된다. condemn의 다양한 예문The international community condemned the human rights violations.국제 사회는 인권 침해를 강력히 비난했다.Many critics condemned the film for it..
C 언어로 재귀와 반복문을 사용한 피라미드 그리기
C 언어로 재귀와 반복문을 사용한 피라미드 그리기
2025.03.24C 언어에서 반복문과 재귀를 활용하여 피라미드를 그리는 방법에 대해 알아보자. 반복문과 재귀가 어떻게 작동하는지 살펴보고, #을 출력하여 피라미드를 그리는 과정에 대해 깊이 이해해보고자 한다.반복문을 사용한 피라미드 그리기먼저 반복문을 사용해서 피라미드를 그리는 방법을 살펴보자.코드 예시 (반복문 사용)#include #include void draw(int h);int main(void){ // 사용자로부터 피라미드의 높이를 입력 받아 저장 int height = get_int("Height: "); // 피라미드 그리기 draw(height);}void draw(int h){ // 높이가 h인 피라미드 그리기 for (int i = 1; i 반복문을 사용한 설명for ..
정렬 알고리즘 완벽 이해: Big O와 Big Ω로 실행 시간 최적화하기(:
정렬 알고리즘 완벽 이해: Big O와 Big Ω로 실행 시간 최적화하기(:
2025.03.24🖤 정렬 알고리즘의 실행 시간: Big O와 Big Ω의 이해이전 글에서도 언급했듯이- 정렬 알고리즘은 데이터를 정렬하는 데 사용되는 중요한 도구다. 하지만 정렬 알고리즘마다 실행 시간이 다르기 때문에, 이를 잘 이해하고 효율적인 알고리즘을 선택하는 것이 중요하다(: 이 글에서는 정렬 알고리즘의 실행 시간을 다시한번 쉽게 설명하고, Big O와 Big Ω의 차이를 명확히 이해할 수 있도록 돕고자 한다.1. 정렬 알고리즘의 실행 시간, 왜 중요할까?정렬 알고리즘은 데이터를 오름차순이나 내림차순으로 정렬하는 작업을 수행한다. 예를 들어, 숫자나 문자를 정렬하는 경우가 여기에 해당한다. 하지만 같은 데이터를 정렬하더라도, 어떤 알고리즘을 사용하느냐에 따라 걸리는 시간이 달라진다. 효율적인 알고리즘을 사용하면..