[C] 문자열 배열 동적 할당 & 버블 정렬 구현

프로그래밍/C 2022. 10. 3. 00:22

C에서는 일반적으로 문자열을 char * 이나 char []로 구현하며, 문자열 배열은 앞 문자열 구현의 배열형인 char*[] 이나 char[][] 로 구현합니다. 즉 C에서 여러 문자열을 배열 형태로 저장하고 싶으면 (char*)[] 의 포인터 배열 형태나 char[][] 의 2차원 배열로 구현을 해야합니다. char strings[4][20] = { {"Hello"},{"I am"}, {"File"}, {"nice to meet you"} }; 1. 문자열 배열을 2차원 배열로 저장하면 다음과 같이 파란색 공간에 메모리 공간이 낭비되는 문제가 발생합니다. 또한 동적으로 문자열 크기를 할당할 수 없는 문제를 가지고 있습니다. char * strings[4] = {"Hello", "I am", "Fil..

Article Thumbnail
[C] 문자열을 다룰 땐 항상 깊은 복사와 얕은 복사를 고려합시다..

프로그래밍/C 2022. 9. 23. 02:49

요새 UNIX 시스템 프로그래밍을 배우면서 C언어로 system call() 을 호출해서 리눅스 tree 명령어 출력을 C언어에서 그대로 구현하는 과제를 진행중입니다. 코딩병이 도져서 오후 11시쯤부터 도전해서 오전 6시까지 프로그래밍 하는 기행을 보였으나.. 완성이 머지 않았는데 재귀적으로 tree() 를 호출하면서 출력을 진행 하면서 중간에 자꾸 메모리가 소멸하는 문제가 발생하였습니다. 디버깅.. 디버깅을 해야하는데..! 리눅스를 VMware 가상 환경으로 돌리고 있어서 훌륭한 디버거 기능을 가진 Visual Studio는 윈도우 전용이라 사실상 사용할 수 없었고, VSCode 에서 gdb를 이용해서 하나 하나 디버깅을 해야 하는 골때리는 상황이 생겼습니다. 사실 저는 주 관심사가 C#이나 Pytho..

Article Thumbnail
[C] 메모리 관련 함수 memset(), memcpy(), memmove(), memcmp(), memchr() 알아보기

프로그래밍/C 2022. 9. 15. 03:33

안녕하세요 파일입니다. 이번 UNIX 시스템 프로그래밍 과목을 수강하면서 따로 배우지 않고 넘어갔던 메모리 관련 함수 memcpy() 를 만나게 되었습니다. 메모리 함수에 대해선 따로 학습하지 않아서 적잖게 당황을 했는데 그런 김에 메모리 관련 함수의 레퍼런스를 정리해보면 좋을 거 같다는 생각이 들어서 본 글을 작성하게 됐습니다. 그래서 오늘 알아볼 함수들은 memset(), memcpy(), memmove(), memcmp(), memchr() 이 되겠습니다. 본 함수들은 메모리에 지정된 바이트 만큼 접근하는 함수로써 C언어를 전부 공부하시고 데이터가 메모리에 어떻게 저장되고 있는지 제대로 이해하신 후, 추가로 학습하시는걸 추천드립니다. * 참고로 본 글 예제는 대부분 Copilot AI로 생성한 것입..

Article Thumbnail
[C++] ESP 핵 제작 가이드

프로그래밍/C 2021. 12. 9. 22:54

https://www.youtube.com/watch?v=SPHARh6ukog

[C] opendir로 파일 읽을때 유니코드, 한글 경로 읽기 및 파일 타입 체크 방법

프로그래밍/C 2021. 11. 5. 00:28

#include #include //dirent 구조체를 위해 dirent.h 참조 #include int main(void) { int length = 0; char file_path[100]; printf("폴더 경로를 입력해주세요. : "); gets(file_path); DIR *d; struct dirent *dir; d = opendir(file_path); if (d) { while ((dir = readdir(d)) != NULL) { printf("%s\n", dir->d_name); length++; } closedir(d); printf("총 발견한 파일수 : %d개", length); //열린 디렉토리를 닫는다. } return 0; } 해당 프로그램을 실행해서 디렉토리 경로를 입력..

Article Thumbnail
[C] 변수 여러개 선언, 초기화 할때 주의점

프로그래밍/C 2021. 5. 19. 03:49

C언어에서 자료형이 같은 변수를 여러개 선언할땐 콤마(,)로 구분지어 선언합니다. int a,b; 이것을 0으로 한꺼번에 초기화 할땐 어떻게 해야할까요? 저는 처음에 이런식으로 진행했습니다. #include int main(){ int a, b = 0; printf("%d %d", a,b); return 0; } 이렇게 쓰고 혹시 두개가 초기화가 제대로 안됬을까 a,b도 출력해봤더니 0 0으로 정상 출력되어서 아무런 의심도 하지 않았죠. 이런 생각으로 백준을 푸는데 너무 쉬운문제가 통과를 안하는겁니다.. https://www.acmicpc.net/problem/5596 5596번: 시험 점수 대한고등학교에 재학 중인 민국이와 만세는 4과목(정보, 수학, 과학, 영어)에 대한 시험을 봤습니다. 민국이와 만..

Article Thumbnail
[C] 피보나치 수열과 메모이제이션

프로그래밍/C 2020. 1. 6. 01:09

피보나치 수열은 수학에서, 피보나치 수(영어: Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다. 처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다. 편의상 0번째 항을 0으로 두기도 한다. 점화식은 $F_n = F_{n-1} + F_{n-2}$ 으로 정리된다. (출처 https://ko.wikipedia.org/wiki/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98_%EC%88%98) 피보나치 수열은 여러 방법을 통해 구현할 수 있고 제일 쉽게 생각하는게 반복문과 재귀함수인거 같습니다. 재귀 함수를 이용한 풀이 #include long long fibo(int n); int main(){ printf("%lld",..

Article Thumbnail