네이버(40)
-
C 언어 | 메모리 할당과 해제
학습 목표메모리를 할당하고 해제할 수 있다. 메모리 할당과 해제malloc() 함수를 이용하여 메모리를 할당한 경우 저장한 값이 필요가 없어지면 쓰레기 값으로 남는다. 이를 메모리 누수(memory leak)라고 한다. 메모리 누수를 방지하기 위해서는 free() 함수를 이용해 메모리를 해제해줘야 한다. 메모리 누수에 관련된 예제를 보자. 프로그램을 살펴보자.f 함수를 보면 포인터 x에 malloc() 함수를 사용해 메모리를 할당한다.메모리의 크기는 int 형(4바이트)의 10배로 40바이트를 할당한다.x의 10번째 인덱스에는 0을 할당한다.main 함수에서는 f 함수를 실행시키고 0을 반환한다. 이 프로그램의 메모리 누수를 확인해보자. valgrind라는 메모리 누수 확인 프로그램을 사용하면 문제를 ..
2021.02.22 -
C 언어 | 문자열의 복사
학습 목표문자열을 복사할 수 있다. 문자열의 복사문자열을 복사하는 코드를 만들어보자. #include #include #include int main(void){ string s = get_string("s: "); string t = s; t[0] = toupper(t[0]); printf("s: %s\n",s); printf("t: %s\n",t);} 사용자에게 입력값 s("emma")를 받고, t에 복사 후 첫 문자를 대문자로 바꾸는 프로그램을 만들고자 했다. 하지만 계획과 다르게 toupper()함수가 s와 t 모두에 영향을 주어 "Emma"가 출력되었다.* toupper() 함수를 사용하기 위해 ctype 라이브러리를 추가했다. 이유는 다음과 같다.cs5..
2021.02.20 -
C 언어 | 문자열의 비교
학습 목표문자열이 저장되어 있는 방식에 근거해서 문자열을 비교하는 방법에 대해 설명할 수 있다. 문자열의 출력문자열의 주소를 출력하는 예시를 다시 보자. #include int main(void){ char *s = "EMMA"; printf("%p\n",s);} 앞선 강의에서 문자열의 주소는 s라는 포인터의 값, 즉 문자열의 가장 첫 값인 s[0]의 메모리 주소를 출력한다 배웠다. 그렇다면 아래 코드가 무엇을 출력하는지 보자.printf("%p\n", &s[0]);printf("%p\n", &s[1]);printf("%p\n", &s[2]);printf("%p\n", &s[3]); 위의 예제에 코드를 추가(8-11)한 모습이다. 명령 프롬프트로 부터 알 수 있는 것은 다음과 같다. &s[0]..
2021.02.20 -
C 언어 | 문자열과 포인터
이제껏 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용했다. 하지만 이는 실제 C에서는 존재하지 않는 자료형이다. 학습 목표문자열 형태의 새로운 자료형인 string이 어떻게 정의되었는지 설명할 수 있다. 문자열과 포인터변수 s에 "EMMA"라는 값을 저장하는 프로그램을 예로 들어보자.#include #include int main(void){ string s = "EMMA"; printf("%s\n",s);} cs50 라이브러리를 사용해, 즉 string 타입을 사용해 값을 출력한 모습이다. 프로그램을 설명하자면 다음과 같다."EMMA"는 문자의 배열이고 s[0]=E, s[1]=M과 같이 하나씩 표현될 수 있다.문자의 마지막인 s[4]는 \0로, 0으로 이루..
2021.02.19 -
C 언어 | 포인터
학습 목표포인터 변수를 정의하고 사용할 수 있다. 포인터C에서는 포인터 개념을 통해 변수의 주소를 쉽게 저장하고 접근할 수 있게 한다. 지난 글에서 배운 '*'연산자를 사용해서 프로그램을 만들어보자. #include int main(void){ int n = 50; int *p = &n; printf("%p\n", p); printf("%i\n", *p);} 위 프로그램을 보면 *p라는 변수에는 &n값, 즉 변수 n의 주소를 저장한다.int *p에서 *는 이 변수가 포인터임을, int는 이 포인터가 int 타입의 변수임을 가리킨다.첫 번째 출력 값을 보면 p는 형식 지정자 %p를 사용해 변수 n의 주소를 출력한다(= 포인터 p의 값).두 번째 출력 값을 보면 *p는 형식 지정자 %i..
2021.02.19