본문 바로가기

C-Language/sscanf(), swscanf()

sscanf(), swscanf() example

sscanf(), swscanf() example
sscanf(const char *src, const char *format, ...)
swscanf(const wchr_t *src, const wchar_t *format, ...)

sscanf()함수는 한개의 문자가 1바이트로 된 문자열로부터 한개의 문자를 읽어서 지정한 변수(char형 변수)에 저장한다
swscanf()함수는 한개의 문자가 2바이트로 된 문자열로부터 한개의 문자를 읽어서 지정한 변수(wchar_t형변수)에 저장한다

#include <stdio.h>
#include <string.h>
#include <locale.h>

/* sscanf(const char *src, const char *format, ...)
*  swscanf(const wchr_t *src, const wchar_t *format, ...)
*/

int main(void) {
 char *eng = "Hello World";
 char *kor = "안녕하세요";
 wchar_t *wch = L"안녕하세요";
 char ch, chr[3];
 wchar_t wchr;


 sscanf(eng,"%c",&ch);
 printf("%c \n", ch); // H

 sscanf(eng+1,"%c",&ch);
 printf("%c \n", ch); // e

 sscanf(eng+2,"%c",&ch);
 printf("%c \n", ch); // l

 sscanf(eng+3,"%c",&ch);
 printf("%c \n", ch); // l

 /* 아래의 문장은 2바이트로 구성된 한글을 1바이트만 읽어오므로 제대로 출력하지 못함 */
 sscanf(kor, "%c", &ch);
 printf("%c \n", ch); // ?

 /* 한글 1자는 2바이트이므로 2바이트를 읽어와서 배열에 순서대로 저장하면 되지만,
 *  복잡하고, 영문과 한글을 혼용한 대량의 문자열은 다루기가 매우 어렵게 된다 */

 sscanf(kor, "%c%c", &chr[0],&chr[1]);
 chr[2] = NULL;
 printf("%s \n", chr); //  안

 /* wchar_t형 자료형(한문자를 2바이트로 처리함)을 사용하기 위해서 다음과 같이 설정함 */
 setlocale(LC_ALL, "korean");

 /* wide character(한글자당 2바이트)를 다루는 함수를 사용하면 2바이트 문자 한개를 한번에 읽어올 수 있다 */
 swscanf(wch,L"%c", &wchr);
 wprintf(L"%c \n", wchr); // 안
}