자습
sscanf_s: 문자열 안의 내용을 여러가지 자료형으로 저장하기
hyrule
2022. 4. 15. 17:48
* "고블린, 10, 10, 10, 10"이라는 문자열을
문자열 Name, 정수 Str, 정수 Dex, 정수 Int, 정수 Luk
다섯 개의 변수에 나눠서 저장해 보자
* 파일 입출력에 요긴하게 쓸 수 있을 것 같다.
#include <iostream>
//sscanf 함수 에러 해제
#pragma warning(disable:4996)
#define BUFFER_SIZE 128
int main()
{
//소스 문자열 생성
char* stringarr = new char[BUFFER_SIZE];
memset(stringarr, 0, BUFFER_SIZE);
strcpy_s(stringarr, BUFFER_SIZE, "고블린, 10, 10, 10, 10");
//복사받을 문자열과 변수 생성
char* name = new char[BUFFER_SIZE];
memset(name, 0, BUFFER_SIZE);
int Str = 0, Dex = 0, Int = 0, Luk = 0;
//sscanf를 활용하여 문자열을 나누어 변수에 저장
sscanf(stringarr, "%[^,], %d, %d, %d, %d", name, &Str, &Dex, &Int, &Luk);
//잘 저장되었는지 출력
std::cout << "이름: " << name << std::endl;
std::cout << "힘 : " << Str << std::endl;
std::cout << "민첩: " << Dex << std::endl;
std::cout << "지능: " << Int << std::endl;
std::cout << "운 : " << Luk << std::endl;
//sscanf_s를 활용하여 문자열을 나누어 변수에 저장
//sscanf와의 차이점: 포인터의 경우 버퍼 사이즈를
//추가로 제공해주어야 한다.
sscanf_s(stringarr, "%[^,], %d, %d, %d, %d", name, BUFFER_SIZE, &Str, &Dex, &Int, &Luk);
//잘 저장되었는지 출력
std::cout << "이름: " << name << std::endl;
std::cout << "힘 : " << Str << std::endl;
std::cout << "민첩: " << Dex << std::endl;
std::cout << "지능: " << Int << std::endl;
std::cout << "운 : " << Luk << std::endl;
delete[] stringarr;
delete[] name;
return 0;
}
관련 문서
* 서식 지정자(%[^,]): https://hyrule.tistory.com/43