codingCat banner
codingCat banner
2018.08.23 09:08

libc 문자열 조작 함수 정리


C 언어에서 문자열 처리는 복잡하다. 언어 수준에서 문자열이라는 데이터 형 자체를 지원하지도 않으니, 덧셈 기호(+)나 비교연산자(==)와 같은 기호를 사용하는 직관적인 문자열 연산을 사용할 수 없기 때문이다. C 언어가 문자열 데이터 형을 지원하지 않고, 문자열을 다루는 연산자도 없으니 모든 문자열 연산은 문자열 함수를 통해 이루어진다. C 표준 라이브러리(일명 'libc')에서 str...로 시작하는 함수들이 그것이며, 모두 string.h 헤더(C++은 cstring 헤더)에 정의되어 있으며 본 시리즈를 통해 이들 함수의 사용법을 정리해보고자 한다. 본 시리즈는 cplusplus(http://www.cplusplus.com) 및 MSDN에 나와있는 레퍼런스를 기준으로 하여 작성되었다.

  1. libc 문자열 조작 함수 정리 (part 01 - strcpy, strncpy)
  2. libc 문자열 조작 함수 정리 (part 02 - strcat, strncat)
  3. libc 문자열 조작 함수 정리 (part 03 - strcmp, strncmp)
  4. libc 문자열 조작 함수 정리 (part 04 - strchr, strrchr)
  5. libc 문자열 조작 함수 정리 (part 05 - strstr)
  6. libc 문자열 조작 함수 정리 (part 06 - strtok)
  7. libc 문자열 조작 함수 정리 (part 07 - strspn, strcspn)
  8. libc 문자열 조작 함수 정리 (part 08 - strlen)
  9. libc 문자열 조작 함수 정리 (part 09 - strpbrk)
  10. libc 문자열 조작 함수 정리 (part 10 - strxfrm, strcoll)
  11. 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;
}
[그림 1] strerror.c 예제 소스 코드
[그림 2] strerror.c 예제 소스 코드의 실행 결과

존재 하지 않는 이름("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)에 대한 정리를 모두 마친다.

- 끝 -


trackbacks: 0, comments: 0
 
Comments
 
 
'Language/C & C++' Related Articles