유틸리티 함수
유틸리티 함수란, c언어에서 핵심은 아니어도, 여러 가지의 계산과 처리를 대신해주는 라이브러리 함수다. 유용하게 쓰이기 때문에 잘 숙지하는 것이 중요하다.
atoi()함수는 정수 문자열을 정수로 변환하는 함수다. (Ascii to Interger(정수형)의 약자다)문자열이 저장된 메모리 주소가 매개변수 값이 되며, 문자열 “123”이 있으면, 그것을 실제 정수 123으로 변환시킨 값을 반환한다.(“ABC"같은 것은 정수로 변환불가다. 변환에 실패하면 0을 반환한다.) 이것도 보안결함이 찾아보면 있다,
atol()함수는 long형 숫자의 문자열을 long 숫자로 변환하는 함수고, atoi()처럼 매개변수의 값이 문자열의 메모리 주소고, 변환하는 것도 문자열(long자료형)을 숫자로 만들어준다. 변환에 실패하면 0L를 반환하는데, 자주 안 쓰는 함수다.
atof()함수는 실수(float)형 숫자의 문자열을 실수로 변환하는 함수다. 매개변수 값은 문자열의 메모리 주소, ‘ato_()‘꼴의 함수이므로 하는 일이 같다. 실제 실수로 변환하는데, 실패하면 0.0을 반환한다.
time()함수는 특이하다. 1970년 1월 1일 자정부터 지금까지 흐른 시간을 초단위로 반환하는데, 매개변수 값은 결과가 저장될 변수의 주소다. 그런데 보통은 ( )안에 NULL을 넣어주고 t = time(NULL); 로 반환 값을 저장한다.
localtime()함수는 time()함수를 받쳐준다. time()달랑 쓰면 초단위로 반환되기 때문에, localtime()에서 time()함수로 반환받은 값(이 저장된 변수의 주소)을 매개변수 값으로 해서, 년/월/일 시/분/초 등의 구조체로 반환해준다.
ctime()함수는 time()함수로 반환받은 값(이 저장돼있는 변수 주소)을 매개변수 값으로, 초단위의 시간을 문자열로 변환해서 반환한다. 이때 로컬 타임 존(Local time zone)의 설정의 맞춰서 변환하게 된다.
srand()와 rand()함수는 랜덤 함수로, 둘이 세트다. srand()함수는 난수(랜덤 값)을 발생시킬 초기 값을 매개변수로 한다. rand()함수에서는 초깃값을 받고(rand의 ( )는 비워둔다)그걸로 0~RAND_MAX(==0×7fff == 32768개)에서 무작위 수를 반환한다. 무작위 난수는 규칙대로 반환되기에 난수도 고르게 나오는데, 가장 큰 단점은 초깃값(seed)가 같으면 무작위로 나오는 수도 같게 되는 것이다. 따라서 초깃값은 대부분 항상 변하는 값인 time()함수의 반환 값을 이용한다.
rand() %n 꼴도 많이 사용한다. rand() %(나머지 연산)3이라 하면, 반환 값은 0~2밖에 없기 때문에, 가위바위보로 써먹을 수도 있다. rand %n이라면 반환 값은 0~(n-1)이 되는 것이다. (다만 n의 값이 커지게 되면 그만큼 랜덤의 편차가 커지게
되므로, 반환 값이 한쪽으로 쏠리게 된다. 참고로 알아두자)
system함수는 command interpreter(명령어 인터프리터, 명령어 해석기라고 보면 편리하다. 명령어를 입력하면 그것을 이해하고 실행한다.)전달, 실행하고 그 결과를 반환해주는 함수다. 매개변수의 값으로 명령 콘솔에서 실행할 문자열이 저장된 메모리의 주소를 삼으며, 반환 값은 0이 아닌 값이다. command interpreter에서 0을 반환하면 0을 반환하고, 에러가 발생한다면 -1을 반환하게 된다.
system("CLS"); 로 많이 쓰이는데, 이 명령어로는 명령어 인터프리터의 명령어를 입력하고 실행한 내용이 다 지워진다.
exit함수는 이름 그대로, 프로그램을 즉시 종료한다. 사실 main함수에서 이것이 나오면, 반환 값이 ( )안의 변수가 된다. 자주 안 쓰이는 함수니, 이런 것이 있다고 알아두자.
'c언어 > 워딩(미정리)' 카테고리의 다른 글
형 한정어, 형재선언, 열거형 상수 (0) | 2019.07.08 |
---|---|
지역 ,자동, 전역, 정적, 레지스터 변수 (0) | 2019.07.08 |
문자열 처리함수 (0) | 2019.07.08 |
문자열의 구분 및 문자 처리 함수 (0) | 2019.07.08 |
매개변수 전달방식 (0) | 2019.07.08 |