CS 기초/배열 7

[CS50] 명령행 인자

명령행 인자란? 사용자가 명령행에서 명령을 실행할 때 해당 명령과 함께 지정하는 인자를 의미합니다. 지금까지 clang을 사용할 때 -o 옵션을 줘서 a.out이 아닌 사용자가 원하는 이름으로 파일을 컴파일했었는데요 여기에서 - o 를 명령행 인자라고 부릅니다. 그렇다면 make나 clang 이외에 사용자가 작성하는 프로그램에서 명령행 인자를 받을 수 있도록 설계하는 방법에 대해 공부해보도록 하겠습니다. 지금까지 코드를 짜면서 매일같이 써온 main함수를 살펴볼까요? main도 형태를 보자면 하나의 함수인데요 여기서 괄호안에 void대신 다른 형태의 코드를 작성해봅시다. #include #include int main(int argc, string argv[]) { if (argc == 2) { prin..

CS 기초/배열 2021.08.10

[CS50] 문자열의 활용

지금까지 문자열의 기본적인 개념들을 학습해봤습니다. 이번 포스팅에서는 문자열을 활용하여 특정 문자를 다른 문자로 치환하거나 문자열 안에 포함되어있는 문자를 검색해보는 방법에 대해 공부해보도록 하겠습니다. 문자열의 길이 및 탐색 사용자로부터 문자열을 입력받아 문자열을 출력하기 위해서는 문자열의 끝을 알아야합니다. 그렇다면 정해지지 않은 문자열의 끝은 어떻게 알 수 있을까요? 문자열의 끝을 알수있는 방법 중 하나는 인덱스의 문자가 종단 문자(\0)와 일치하는지 검사하는 것입니다. for (int i = 0; s[i] != '\0'; i++){ ..... } s라는 문자열이 있다고 했을 때 이런 식으로 길이를 구할 수 있습니다. 다른 방법은 strlen( )이라는 함수를 사용하는 것입니다. #include #..

CS 기초/배열 2021.08.09

[CS50] 문자열과 배열

C뿐 아니라 많은 프로그래밍 언어들은 문자열을 저장하기 위해 string 자료형을 사용했습니다. 문자열이라는 단어는 문자가 나열되어있다. 즉 배열되어있다.라는 의미로 추측해볼 수 있는데요. 이런 관점에서 string 자료형이 C에서 어떻게 정의되어있는지 배열과 관련해서 공부해보도록 하겠습니다. string은 말 그대로 문자(char)의 배열이었습니다. 만약 string s = "HI!"; 로 정의되어 있다면 s는 문자열이기 때문에 메모리상에 'H', 'I', '!'로 저장되어 있을겁니다. 그런데 사실 문자열은 저번 포스팅에서 설명했듯이 길이가 정해져 있지 않기때문에 메모리의 크기 역시 정해져있지 않습니다. 그럼 string이 연속으로 정의되어있다면 어떻게 구분할까요?? 그래서 string에는 종단 문자인..

CS 기초/배열 2021.08.08

[CS50] 배열

지금까지 특정 자료형의 변수를 선언하면 컴퓨터 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 이번 포스팅에서는 메모리상에서 여러값을 연이어 저장하는 방법을 공부해보도록 하겠습니다. C에는 여러가지 자료형과 그에 맞는 메모리의 크기가 있습니다. - char : 1byte - bool : 1byte - int : 4byte - float : 4byte - long : 8byte - double : 8byte - string : 알 수 없음(길이에 따라 다르다) 이러한 데이터들은 RAM이라고 하는 컴퓨터 하드웨어에 저장이 됩니다. 이제 여러값을 연이어 저장해서 사용하기 위해서는 먼저 배열이란 단어에대해 알아야합니다. 배열이란? 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료구조이다.(출처..

CS 기초/배열 2021.08.07

[CS50] 코드의 디자인

규모가 큰 프로그램을 작성하게 되면 본인 혼자가 아니라 여러 사람들이 함께 작업을 진행하게 됩니다. 이때는 내가 기여한 부분이 프로그램에 오류를 발생시키지 않도록 주의해야 합니다. 또한 같은 코드를 작성했다고 하더라도 어떻게 디자인하는지에 따라 상대방이 코드를 이해하고 수정하는 속도가 달라질 수 있기 때문에 이러한 부분도 신경 써줘야 합니다. 따라서 이번 포스팅에서는 코드의 정확성과 디자인을 어떻게 관리하는지에 대해서 공부해보도록 하겠습니다. 본 포스팅에서 나오는 코드의 사용은 CS50 강의를 위해서 작성되었다고 합니다. CS50 IDE를 제외한 다른 IDE에서는 사용이 불가능할 수 있습니다. check50 ~/ $ check50 cs50/problems/hello (cs50/problems 경로에 있는..

CS 기초/배열 2021.08.06

[CS50] 디버깅

저번 포스팅에서는 소스코드를 작성하고 실행하기 위한 컴파일링을 해줬는데 만약에 컴파일링을 할 때 코드의 오류가 있거나 결과가 우리 의도와 다를 땐 어떻게 해야 할까요? 이런 것을 '버그'라고 하는데 오늘은 버그를 효과적으로 찾고 그에 따른 해결방법에 대해 공부해보겠습니다. 이번 포스팅에서는 버그와 디버깅이라는 단어를 알면 본문 내용을 이해하기 쉬울 겁니다. 우선 버그(Bug)란? 소프트웨어가 예상하지 못한 잘못된 결과를 내거나, 오류가 발생하거나, 착오나 오작동이 발생하는 등의 문제를 뜻한다. 보통 프로그램의 소스코드나 설계 과정에서의 오류 때문에 발생한다. (출처: 위키백과) 디버깅(Debugging)이란? 디버그(Debug)라고도 하며 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나..

CS 기초/배열 2021.08.05

[CS50] 컴파일링

지금까지 C 코드를 작성하고 실행하기 위해서는 '컴파일링' 이라는것을 해줘야 합니다. 그렇다면 컴파일링이 무엇인지, 컴파일링을 하면 구체적으로 어떤 단계를 거쳐서 컴퓨터가 해석 가능하게 변하는지를 공부해보도록 하겠습니다. 우선 컴파일링이란 컴파일 하는 과정을 말하며, 사용자가 작성한 소스코드를 컴퓨터가 이해할 수 있도록 0과 1로 구성된 바이너리 언어 파일로 바꿔주는 것을 말합니다. #include int main(void){ printf("hello, world\n"); } 이 코드를 실행하려면 clang hello.c로 컴파일 하고, ./a.out 명령을 통해 프로그램을 실행하게 되는데 프로그램을 실행할 때 아래의 4 단계를 거칩니다. (단어가 이해가 안 된다면 영어단어 그대로 보셔도 됩니다.) 1...

CS 기초/배열 2021.08.04