libc 문자열 조작 함수 정리
C 언어에서 문자열 처리는 복잡하다. 언어 수준에서 문자열이라는 데이터 형 자체를 지원하지도 않으니, 덧셈 기호(+)나 비교연산자(==)와 같은 기호를 사용하는 직관적인 문자열 연산을 사용할 수 없기 때문이다. C 언어가 문자열 데이터 형을 지원하지 않고, 문자열을 다루는 연산자도 없으니 모든 문자열 연산은 문자열 함수를 통해 이루어진다. C 표준 라이브러리(일명 'libc')에서 str...
로 시작하는 함수들이 그것이며, 모두 string.h
헤더(C++은 cstring
헤더)에 정의되어 있으며 본 시리즈를 통해 이들 함수의 사용법을 정리해보고자 한다. 본 시리즈는 cplusplus(http://www.cplusplus.com) 및 MSDN에 나와있는 레퍼런스를 기준으로 하여 작성되었다.
- libc 문자열 조작 함수 정리 (part 01 - strcpy, strncpy)
- libc 문자열 조작 함수 정리 (part 02 - strcat, strncat)
- libc 문자열 조작 함수 정리 (part 03 - strcmp, strncmp)
- libc 문자열 조작 함수 정리 (part 04 - strchr, strrchr)
- libc 문자열 조작 함수 정리 (part 05 - strstr)
- libc 문자열 조작 함수 정리 (part 06 - strtok)
- libc 문자열 조작 함수 정리 (part 07 - strspn, strcspn)
- libc 문자열 조작 함수 정리 (part 08 - strlen)
- libc 문자열 조작 함수 정리 (part 09 - strpbrk)
- libc 문자열 조작 함수 정리 (part 10 - strxfrm, strcoll)
- libc 문자열 조작 함수 정리 (part 11 - strerror)
Part XI. strerror
이번 포스팅에서는 가장 최근에 발생한 오류 내용을 확인할 때 사용하는 함수인 strerror
함수에 대해 정리한다.
1. strerror
strerror
함수의 원형은 다음과 같이 정의되어 있다.
char * strerror(int errnum);
errnum
- 오류 번호이다. 이 값에 따라 각기 다른 오류 내용을 볼 수 있다. 가장 최근에 발생한 오류의 고유번호를 알고자 한다면
errno.h
헤더에 정의되어 있는errno
전역 식별자를 여기에 전달하면 된다.
다음은 strerror
함수의 사용 예이다.
/* strerror.c */
#include <stdio.h>
#include <string.h>
#include <errno.h> // identifier 'errno'
int main(int argc, char * argv[])
{
FILE * fp = NULL;
if ((fp = fopen("NotExists", "r")) != NULL)
{
printf("File Exists.\n"); // File Exists
fclose(fp);
}
else
{
printf("File NOT Exists.\n"); // File Error
printf("\"%s\"\n", strerror(errno));
}
return 0;
}
존재 하지 않는 이름("NotExists"
)의 파일을 fopen
함수를 통해 열려고 하였다. 당연히 fopen
함수는 NULL
을 반환하지만 한편으로는 전역변수 errno
에 오류 코드를 설정한다. 이 오류 코드는 정수(int
)형인데 구체적으로 사용자가 읽을 수 있는 텍스트로써 어떤 내용인지를 보고자 할 때 strerror
함수를 사용하여 문자열 형태로 출력하고 있음을 확인할 수 있다.
1-1. Wide Character 확장 함수 - _wcserror
현재 버전의 표준 C 라이브러리에는 wchar
버전의 strerror
함수가 정의되어 있지 않다. Visual Studio 사용자는 UTF-16/UTF-32와 같은 Wide Character 문자열 형식에 대해 위하여 다음의 함수를 사용 가능하다.
wchar_t * _wcserror(int errnum);
<Epilogue>
본 포스팅을 통해 문자열 비교 함수에 대해 정리해 보았다. 이것으로 C 표준 라이브러리(libc
)에서 제공하는 문자열 조작 함수(strXXX
)에 대한 정리를 모두 마친다.
- 끝 -