c-50

[C언어 50강] 30강. 동적 메모리: malloc/calloc/realloc/free 패턴

C언어를 배우다 보면 어느 순간 배열 크기를 미리 정해두는 방식이 답답해집니다. 사용자 입력 길이가 매번 다르고, 파일 크기도 실행 전에는 알 수 없고, 처리해야 할 데이터 개수도 상황마다 달라지기 때문입니다. 이때 필요한 도구가 동적 메모리입니다. 오늘은 malloc, calloc, realloc, free를 "함수…

[C언어 50강] 29강. 이중 포인터: 포인터의 포인터, 문자열 배열(char**)

C언어에서 이중 포인터(T )는 처음 보면 문법 장벽처럼 느껴지지만, 실제로는 아주 단순한 구조입니다. “값을 가리키는 포인터를 또 가리키는 포인터”일 뿐입니다. 문제는 이 개념이 문자열 배열, 함수에서 포인터를 바꾸는 패턴, 동적 2차원 구조와 한꺼번에 등장한다는 점입니다. 오늘은 문법을 외우기보다, 왜 포인터를 한…

[C언어 50강] 28강. 포인터 산술: +1 의미, const 포인터/포인터 const

포인터 산술은 C언어에서 “메모리를 값 단위로 읽고 이동한다”는 감각을 만드는 핵심 주제입니다. 특히 p + 1이 정확히 무엇을 의미하는지, const int p와 int const p가 어떻게 다른지 구분하지 못하면 이후 동적 메모리, 문자열 처리, 버퍼 순회에서 실수가 반복됩니다. 오늘은 문법 암기보다 타입이 이동…

[C언어 50강] 27강. 포인터와 배열의 관계: 배열명, 포인터 인덱싱

배열과 포인터는 C언어에서 가장 많이 헷갈리는 조합입니다. 많은 입문서가 “배열은 포인터다”라고 짧게 설명하는데, 이 문장은 절반만 맞고 절반은 틀립니다. 오늘은 이 모호한 문장을 정확히 해부해 보겠습니다. 핵심은 배열명은 특정 문맥에서 포인터처럼 변환(decay)되지만, 배열 자체와 포인터 변수는 동일한 존재가 아니다…

[C언어 50강] 26강. 포인터 입문: 주소(&), 역참조(*), NULL, 포인터 타입

C언어를 배우다 보면 어느 순간부터 "문법"이 아니라 "메모리 모델"을 이해해야 코드가 읽히기 시작합니다. 그 경계선에 있는 개념이 바로 포인터입니다. 오늘은 포인터를 무작정 외우는 대신, 주소와 값의 관계를 머릿속에 그릴 수 있도록 설명합니다. 핵심은 *와 &를 기호로 암기하는 것이 아니라, “컴퓨터가 값을 어디에 저…

[C언어 50강] 25강. 문자열 파싱: strtok/sscanf/strtol, 토큰 분해 실습

C 프로그램이 현실 데이터를 다루기 시작하면, 결국 대부분의 시간은 “문자열을 잘라서 의미 있는 값으로 바꾸는 일”에 쓰입니다. 로그 한 줄, CSV 한 줄, 명령행 입력 한 줄을 받아 필요한 토큰을 꺼내고, 숫자로 변환하고, 검증하는 흐름이 핵심입니다. 오늘은 strtok, sscanf, strtol을 단순 암기가 아…

[C언어 50강] 24강. 문자열 라이브러리: strlen/strcpy/strncpy/strcat/strcmp

문자열 라이브러리는 C에서 생산성을 올려주는 도구이지만, 원리를 모른 채 쓰면 버그를 더 빨리 만드는 도구가 되기도 합니다. 오늘은 strlen, strcpy, strncpy, strcat, strcmp를 함수 목록으로 암기하지 않고, 각 함수가 무엇을 전제로 동작하는지를 중심으로 이해합니다. 핵심은 단 하나입니다. C…

[C언어 50강] 23강. 문자열 입출력: fgets/puts, 개행 처리, 안전한 입력

문자열 입출력은 C에서 가장 자주 쓰이지만, 동시에 가장 자주 사고가 나는 영역입니다. 특히 scanf("%s")에 익숙해진 상태에서 프로젝트를 시작하면 공백 입력 누락, 버퍼 초과, 개행 잔여 문제를 연달아 만나게 됩니다. 이번 강의의 목표는 함수 이름을 외우는 것이 아니라, 왜 fgets 중심으로 입력을 설계해야 하…

[C언어 50강] 22강. 문자열 기초: char 배열, 널 종료 문자(\0)

C언어에서 문자열은 독립적인 전용 타입이 아닙니다. 이 한 문장을 제대로 이해하면 앞으로 fgets, strcpy, strcmp, 포인터, 버퍼 오버런 같은 주제가 훨씬 덜 어렵게 느껴집니다. 오늘은 “문자열은 결국 char의 연속이며, 끝을 알려주는 \0이 반드시 필요하다”는 핵심을 개념 중심으로 정리합니다.

[C언어 50강] 21강. 배열과 함수: 배열 전달, 길이 전달 패턴

배열을 함수로 넘기는 순간, 많은 초보자가 처음으로 “C는 생각보다 엄격한 언어구나”를 체감합니다. 변수 하나를 넘길 때는 값이 복사된다는 규칙이 비교적 단순하지만, 배열은 함수 인자에서 동작 방식이 달라지기 때문입니다. 오늘은 배열 전달의 본질(배열→포인터 변환), 길이를 왜 항상 함께 넘겨야 하는지, 실무에서 안전하…