목록공부 (5)
FEEL
size_t 자료형을 살펴보면 결국에는 unsigned로 되어 있지만 왜 굳이 size_t자료형을 사용하는 것 일까? size_t는 32비트 운영체제에서는 부호없는 32비트 정수이고 64비트 운영체제에서는 부호없는 64비트 정수로 정해져 있다. 하지만 unsigned의 경우 그렇지 않다. 64비트 운영체제에서 꼭 64비트 정수로 정해져 있는 것이 아닌 최대 64비트 정수를 가질 수 있는 것이다. 따라서 size_t는 무조건 크기에 대해 보장을 받지만 unsigned는 그렇지 않다. 그래서 문자열의 길이, 메모리의 크기를 사용하는 곳에서 size_t를 사용하게 된다.
memmove, memcpy함수에 대해 찾아보면 dst, src가 null인 상황일 때 같은 것을 고려하고 만들어진 함수들은 아니다. 따라서 null일 때는 segmetation fault가 발생한다. 근데 왜? 둘다 null일 때는 에러가 발생하지 않는데 그 이유에 대해 궁금해졌다. 그래서 이 함수가 어떻게 구현되어 있는지 찾아보았다. dst == src || len == 0인 상황에서는 바로 dst를 반환해버린다. 즉 dst와 src가 서로 같을 때는 굳이 복사하는 과정을 수행할 필요가 없기 때문에 dst를 반환해버린다. 내가 생각하기에는 여기서 예기치 못한 동작이 발생한 것이다. 둘다 0(NULL)일 때 이부분이 실행되기 때문에 오류 없이 함수가 정상적으로 종료 되어 버린다.
C언어 에서 문자열을 입력받는 함수에 대하여 알아보려고 한다. 그전에 문자가 어떻게 입력되는지 알아보자. 문자는 프로그램이 실행되면 키보드로 부터 데이터 입력을 위해 운영체제가 입력 버퍼를 생성한다. ※ 입력 버퍼란? 데이터 입력을 위한 특정 크기의 메모리 공간이다. 키보드로 부터 enter를 입력 받으면 입력된 데이터가 한꺼번에 입력버퍼로 이동한다. 따라서 이렇게 입력된 것을 scanf(), gets(), fgets()함수는 입력버퍼에서 데이터를 읽어들여 저장하는 것이다. 입력받는 함수는 흔히쓰던 scanf()함수도 있고 조금은 생소할 수 있는 gets, fgets가 있다. 지금 3가지 함수에 대해 자세히 알아보려고 한다. 1. scanf() scanf()는 우리가 처음 c언어를 배울 때 나오는 것이기..
1. vi 편집기 입력 시작 명령어 명령어 내용 a 현재 위치의 다음부터 입력시작 A 현재 줄의 끝에서 부터 입력시작 i 현재 위치의 앞에서 부터 입력시작 I 현재 줄의 처음에서 부터 입력시작 o 현재 줄과 다음줄 사이에서 입력 시작 O 현재 줄과 앞줄 사이에서 입력 시작 2. vi 종료 명령어 명령어 내용 :q 그대로 종료 :q! 변경 내용을 저장하지 않고 종료 :wq 변경 내용을 저장하고 종료 3. vi 편집기 파일 불러오기 명령어 명령어 내용 :r파일명 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러옴 4. vi 편집기 파일 저장하기 명령어 명령어 내용 :W 문서의 내용을 현재 파일에 저장 :W 파일명 문서의 내용을 지정하는 파일에 저장 :W! 파일명 문성의 내용을 지정하는 파일에 저장 (이..
경로는 절대 경로와 상대 경로 2가지로 나뉜다 상황에 따라, 기호에 따라 절대경로와 상대 경로를 적절하게 사용한다. 1. 절대 경로 : 기준점 : 최상위 디렉터리(/) 절대 경로는 경로 시작의 기준점을 최상위 디렉터리인 루트 디렉터리(/)를 기준으로 한다. 현재 위치가 test 계정의 홈 디렉터리하고 했을 때 절대 경로는 다음과 같다. ex) test 계정 홈 디렉터리의 절대경로 : /home/test 리눅스 명령어인 pwd로 현재 위치를 절대 경로로 확인할 수 있다. 2. 상대 경로: 기준점 : 현재 디렉터리(./) 상대 경로는 경로 시작의 기준점을 현재 있는 디렉터리를 기준으로 경로를 나타는 것이다. ex) / -> home -> test (현재 위치) -> a a 파일 위치 =>./a home 디렉..