자습

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