C언어 11

[C] 2차원 배열

C언어로 코딩을 하다가, 문자열들의 배열을 만들 일이 있었다. 그런데 생각해보니 C언어에서는 문자열 자체가 문자들의 배열이라서, 문자열들의 배열은 2차원 배열로 구현해야 한다는 점을 깨달았다. C언어에서 2차원 배열을 구현하는 방식이 한 가지는 아닌 것 같다. 우선 가장 직관적인 방법으로 구현을 해보겠다. 우선 정수의 2차원 배열, 1 #include 2 3 int main(){ 4 char ary[3][3] = {{1,2,3}, {4,5}, {6}}; 5 for (int i = 0; i < 3; i++){ 6 for (int j = 0; j < 3; j++){ 7 printf("%d", ary[i][j]); 8 } 9 printf("\n"); 10 } 11 return 0; 12 } 다음은 문자열들의 ..

C언어/문법 2024.02.21

[C] 표준 라이브러리 <stdlib.h>

stdlib.h 헤더파일에 포함된 다양한 함수를 알아보자. 아직 내 단계에서는 난수를 생성할 때 주로 사용하는 헤더이며, 꾸준히 추가해갈 예정 rand rand() 함수는 랜덤한 정수를 생성해서 반환하는 함수이다. 그렇기 때문에 rand 함수는 보통 범위를 한정시켜주기 위해 나머지 연산자와 함께 사용된다. 1 #include 2 #include 3 4 int main(){ 5 int rand_num = rand() % 10; 6 printf("%d\n", rand_num); 7 return 0; 8 } 위 코드에서와 같이 rand() 함수로 난수를 생성하고 10으로 나눈 나머지를 구하면, rand_num 변수에는 0 ~ 9 사이의 난수가 들어가게 되는 것이다. 그런데 코드를 연속해서 실행시켜본다면, 한가..

C언어/문법 2024.02.20

[C] <string.h>의 문자열 처리 함수

코딩을 하다보면 상당히 많이 사용하게 되는 문자열 처리 함수들이 포함된 헤더파일 에 대해 정리를 해보려 한다. strlen string + length → strlen 문자열의 길이를 반환해주는 함수이다. 이때 널문자 '\0' 전까지의 길이가 문자열의 길이다. 1 #include 2 #include 3 4 int main(){ 5 char test[10] = "Hello"; 6 7 printf("%d\n", (int)strlen(test)); 8 return 0; 9 } 위 코드에서와 같이 strlen 함수는 하나의 매개 인자를 받고, 그것은 문자열 배열의 시작 주소값일 것이다. strlen 함수 앞에 int 형태로 형변환을 해주는 이유는, strlen의 반환 값이 size_t, 혹은 long unsig..

C언어 2024.02.19

[C] 프로젝트 완성, 후기

stack으로 구현하는 바질 키우기 게임이 완성되었다. 해당 프로젝트를 진행하며 알게 된 부분들을 정리해보자.우선 기본적으로 이번 프로젝트에서는 사용자로에게 두 키워드를 주어주면, 사용자가 그 중 하나를 선택(입력)한다. 그러면 그 키워드에 해당하는 문장이 출력된다. 이를 구현하는 것이 생각보다 힘들었다. 파이썬에서처럼 딕셔너리 자료형을 사용해서 구현할 수 있다면 편리했을텐데, C에는 따로 그런 자료형이 없어서 직접 만들어 줄 수밖에 없었다.#include #include //인풋을 저장해놓은 text에 그에 대응하는 value값을 저장void game(stacktype* s, char* text, char* key[], char* value[], char* neg_key[], char* neg_valu..

C언어/자구알 2024.01.28

[C] <stdio.h>의 표준 입출력 함수

C언어의 대표적인 헤더파일 중 하나인 아마 초심자 입장에서 가장 익숙한 헤더파일이지 않을까 한다. 그럼 stdio.h가 무슨 뜻일까? 많은 사람들이 그냥 스튜디오쩜에이치라고 읽는 것으로 아는데 (나포함) 실제로는 STanDard Input Output library의 약어라고 한다. (뒤에 .h는 header file이라는 뜻!) 직역하면 우리에게 익숙한 '표준 입출력 함수 라이브러리'이다. 그럼 이 표준 입출력 함수 라이브러리에는 어떤 함수들이 있냐? 크게 printf, scanf 등과 같은 일반적인 입출력 함수들이 있고, fopen 등의 파일 입출력 함수가 있다. 파일 입출력 함수에 대해서는 나중에 배워보도록 하고 우선은 일반적인 입출력 함수! 그 중에서도 가장 대표적인 몇가지만 익혀보도록 하자. ※..

C언어/문법 2024.01.15

[C] _CRT_SECURE_NO_WARNINGS

오류 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Visual Studio로 코딩하는 사람들은 위 오류를 마주해본 적이 있을 것이다. 해당 오류는 scanf, strcpy 등의 함수를 사용하려 할 때, 메모리 값을 지정해주지 않았다는 이유로 위의 경고 문구를 내보낸다. 따라서 권유하는대로 메모리 지정까지 해줘야하는 scanf_s 구문을 사용해도 되지만, ※ visual studio에서만 호환되는 함수라고 한다. 굳이 사용할 필요는 없을 듯? 이게 불..

C언어/문법 2024.01.15

[C] 동적 메모리 할당

동적 메모리 할당이란? 컴퓨터 프로그램이 실행되는 도중인 런타임 도중에 사용할 메모리 공간을 할당하는 것. malloc 함수 동적메모리 할당 함수 기초적인 이론에 관한 내용은 이정도만 하고 내가 공부하면서 헷갈렸던 부분 위주로 정리해보자면, malloc 함수는 보통 다음과 같은 형태로 사용한다. #include //malloc 함수가 포함된 헤더파일 typedef (자료형)element; int main() { element* a; a = (element*)malloc(sizeof(element) * 원하는크기); return 0; } 우선 malloc 함수 앞에 (element*)는 형변환 연산자인데, malloc 함수의 반환값은 (void*)이기 때문에 우리가 처음 지정해준 포인터 변수 a의 자료형으..

C언어/문법 2024.01.12

[C] 포인터와 배열 간의 관계

포인터에 대한 개념이 어느정도 잡힌 이후로도, C로 작성된 코드들을 보면 이해가 안되는 부분이 많았다. 이제와서 생각해보면, 그 원인은 포인터와 배열 간의 관계에 대해 파악하지 못하고 있었기 때문이었던 것 같다. 우선, 가장 먼저 짚고 넘어가야할 부분은 이것인 것 같다. 우리가 일반적으로 알고 있는 배열의 형태는 다음과 같다. int a[3]; 해당 코드는 정수형 변수를 3개 저장할 수 있는 배열을 선언한다. 이때 우리가 배열의 이름으로 지정해준 이 a는 사실 포인터 변수이다. 그리고 그 값에는, 첫 번째 메모리칸의 시작 주소가 저장된다. 예를 들어, 위의 코드를 실행 시켰을 때, 100~103 104~107 106~109 이렇게 4칸 씩(정수형 변수의 메모리 크기는 4byte) 메모리가 잡혔다고 하자...

C언어/문법 2024.01.11

[C] 포인터

나의 기준, 파이썬 등 다른 언어에 비해 유독 C언어가 직관적으로 다가오지 않는다는 느낌을 받았다. 그리고 그 원인은 의심할 여지 없이 포인터 이새끼 때문이었던 것 같다. 그래서 여러 강의들과 교재들, 그리고 수상할 정도로 코딩 지식이 해박한 아빠의 도움을 받아 어느 정도 포인터에 대한 감을 잡은 지금, 다시 까먹지 않기 위해 내가 여태껏 이해한 내용들을 정리해보고자 한다. 나를 포함한 많은 학생들이 C언어에서 특히 포인터만 보면 발작을 일으키고 헛구역질이 나는 것으로 알고 있다. 그도 그럴 것이, 포인터를 이해하려면 프로세스의 메모리 처리 구조에 대해 어느정도 알고 있어야 하는 것 같다. 근데 컴퓨터 전공 학과가 아니면, 선행 과목으로 해당 과목들을 배우지 않은 채 바로 C언어 코딩부터 배우기 때문에 ..

C언어/문법 2024.01.11

[C] 프로젝트 설계

바로 본격적인 프로젝트 설계로 돌입해보자. 프로젝트명 : 바질이 키우기 게임※ 바질을 키우는 한 소녀를 본 적이 있는데, 아주 애지중지 바질을 키우는 모습이 인상적이었어서 이런 게임을 만들어보기로 했다.게임 설명말그대로 바질을 키우는 게임이다.바질이에게는 0부터 시작하는 체력이 있고, 체력은 최대치는 100이다. ※'바질이'는 바질의 이름임플레이어가 좋은 말을 해주면 바질이의 체력이 10 증가하며, 나쁜 말을 하면 20 감소한다. ※실제로 과학적으로 입증된건진 모름타자연습 게임 형태로 진행될 듯하다.제한 시간 내에 바질이의 체력을 100까지 올리면 게임 클리어다.구체적인 게임 구상바질이의 체력은 상시로 화면에 표시되어 있다. 제한시간 또한 화면에 표시되며, 게임 시작을 누른 직후부터 계속 감소한다.플레이..

C언어/자구알 2024.01.09