본문 바로가기

반응형
SMALL

C/개념

C에서 문자열 반환하는 함수 만들기 프로그램을 짜다보면 문자열을 반환하는 함수를 만들어야 할 때가 있습니다. 사실 파이썬에선 문자열 반환이 간단한 편인데, C에서는 어떨까요? 어떤 형식으로 반환을 해야 문자열 반환이 가능할까요? const char* string() { return "Hello World!"; } int main(void) { printf("%s", string()); } 위와 같이 const char* 형식으로 반환을 하면 됩니다. 왜 그럴까요? 사실 c에서 문자열이라는 것은 char 데이터로 이루어진 배열을 뜻하게 됩니다. 그렇다면 그 문자열을 가리키는 주소값은 어떤 값을 가리키고 있을까요? c에서 배열을 사용하는 것과 똑같은데, 바로 문자열 제일 처음을 가리키게 됩니다. 그렇게 되므로써 %s를 만나고 '\0' 값을 만.. 더보기
scanf의 맹점 (2) / 입출력 속도 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW45RuSae2gDFAQ7&categoryId=AW45RuSae2gDFAQ7&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제를 풀다 알게된 점을 소개하려 합니다. 보통 C로 문제를 풀 땐 scanf로 입력을 받는 것이 보통입니다. (제가 그렇습니다) 근데 이 문제는 scanf로 풀면 안되더라고요?? 21개의 TC 중에 0개부터 바로 시간초과 빡 ! 이것 저것 수정해보다가 입력을 어떻게 받는지에 따라서 속도 차이가 있다고 해서 그 부분에.. 더보기
scanf의 맹점 / 입력 버퍼 C언어로 문제를 풀다가 아래와 같은 입력 값을 받았습니다. 1 3 A 10 B 7 C 5 그래서 저는 A와 10을 따로 변수에 담기 위해서 아래와 같은 코드를 이용했습니다. #include int main(void) { int num; char word; int T; int N; scanf("%d", &T); for (int t = 1; t 더보기
"const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다. - 에러 수정 C 언어 공부 중 만난 에러입니다. 기본적으로 C 언어에선 포인터 개념을 사용합니다. 문자열에서도 이와 같은 개념을 똑같이 적용할 수 있는데, 분명 책에선 잘 된다고 되어있는데, 작동을 했을 때 에러가 발생해서 그 해결법을 적어보려 합니다. 문제의 코드입니다. #include int main(void) { char* str = "안녕"; printf("%s", str); } 간단하죠? 되게 간단한데 str 포인터가 "안녕"이라는 상수를 가리킬 수가 없습니다. str과 "안녕"의 형식이 달라서 발생하는 오류입니다. 해결방법은 2가지가 있습니다. 1. str을 const로 바꾼다. #include int main(void) { const char* str = "안녕"; printf("%s", str); } .. 더보기
Hash 구현 Hash를 구현해보았습니다. Python에는 Dictionary라는 좋은 라이브러리가 있는데, Pro 시험을 위해서라면 직접 구현을 해봐야겠죠? 어려우니 주석을 잘 봐주시길 바랍니다. #include #include #define MAX_KEY 64 #define MAX_DATA 128 #define MAX_TABLE 4096 int strcmp(char* data1, const char* data2) { int index = 0; while (data1[index] != '\0') { if (data1[index] == data2[index]) { index++; } else { return 1; } } if (data2[index] != '\0') { return 1; } return 0; } voi.. 더보기
Hash 알고리즘 Hash 데이터는 어떻게 찾을까요? 1. 가장 간단한 방법으로 모든 데이터를 비교해서 찾는 방법 2. 데이터를 정렬하고 Binary search 방식으로 찾는 방법 (nlogn) 3. Hash를 이용해서 데이터를 찾는 방식 이번 글에서는 Hash를 알아봅시다. Hash의 목적은 데이터의 검색을 빠르게 하기 위한 자료 구조입니다. 데이터를 key를 만들고, key가 같은 데이터만 검색하여 내가 원하는 데이터를 찾는 방식입니다. 단점은 데이터의 저장 공간이 많이 필요합니다. Hash를 구현하기 위해선 1. Data를 Key로 변환하는 함수를 구현해야 합니다. 2. Data가 존재하는지 확인하는 함수를 구현해야 합니다. 3. Data를 추가하는 함수를 구현해야 합니다. 4. Data를 삭제하는 함수를 구현해야.. 더보기
C언어의 메모리 동적 할당 C언어에서 제공하는 malloc, calloc, realloc 함수를 이용한 메모리 동적할당을 알아보도록 하겠습니다. malloc 함수 동적으로 메모리를 할당하는 함수 (힙 영역에 메모리를 할당) # include void* malloc(size_t size) // malloc 함수의 원형 함수 호출 시 할당하고자 하는 메모리의 크기를 바이트 단위로 전달하면 그 크기만큼 메모리를 할당하게 됩니다. 그리고 할당한 메모리의 주소(첫 번째 바이트의 주소)를 리턴합니다. 메모리 할당에 실패하면 NULL이 리턴됩니다. 리턴형이 void*(void 포인터) ? malloc은 단순히 메모리만 할당하는 함수입니다. 때문에 개발자가 어떤 데이터 형을 저장하는지 예측할 수 없습니다. 예를들어 4바이트를 할당했을 경우 in.. 더보기
C언어의 메모리 구조 프로그램을 실행하면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당합니다. 할당되는 메모리 공간은 크게 스택(Stack), 힙(Heap), 데이터(Data) 영역으로 나뉘어집니다. 이러한 메모리 공간이 왜, 어디서 할당되는지를 알아보도록 하겠습니다. 메모리 공간의 할당 시기는 프로그램이 실행될 때마다 할당이 됩니다. 할당이 되는 장소론 메인 메모리(RAM)이며, 할당 용도로는 프로그램 실행 시 필요한 메모리 공간(지역변수, 전역변수 선언을 위해) 할당이 됩니다. 할당 시기 : 프로그램이 실행될 때마다 할당 장소 : 메인 메모리(RAM) 할당 용도 : 프로그램 실행 시 필요한 메모리 공간(지역변수, 전역변수 선언을 위해) 할당 데이터 영역 전역 변수와 static 변수가 할당되는 영역 프로그.. 더보기

반응형
LIST