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); // 안
}