IT News/C++

string to char array in c++, 문자열을 char 배열로 변환방법 c++

Fshop 2019. 6. 10. 18:28
반응형

오늘 rapidxml 이라는 라이브러리를 사용했는데요. 이 라이브러리를 사용해서 xml 로 되어있는 문자열을 받은 정보를 c++ 로 해석을 해서 사용을 하려고 하였는데요. 이상하게도 사용할 수가 없었습니다. 한참을 헤메다가 알게된 사실은 바로.. 바로 아래의 예제에서 text 로 되어있는 부분에 char array 를 넣어야 하는데 제가 string 으로 넣어서 자꾸 에러가 난 것이었어요. 처음 xml 파싱을 하다보니 몇 시간을 그냥 날려 버렸네요ㅠ

using namespace rapidxml;
xml_document<> doc; // character type defaults to char
doc.parse<0>(text); // 0 means default parse flags


아래의 예제는 string 을 char array 로 변환하기 위한 샘플 예제 파일입니다. 요즘에는 strcpy 같은 명령어가 잘 않되는 것 같더라구요. 물론 제가 잘 몰라서 그럴수도 있는데요. 아무튼 손 쉽게 string -> char array 변환하는 방법을 소개합니다. 간단히 vector 를 이용하면 되더라구요.

#include <iostream>

#include <string>
#include <vector>
using namespace std;

int main()
{
	
	string str = "This is a string to char array example in c++";
	vector<char> charArray(str.begin(), str.end());
	charArray.push_back('\0');
	char* charArrayPtr = &charArray[0];

	cout << charArrayPtr << endl;

}


아래의 예제 소스는 rapidxml 을 적용한 소스코드의 일부인데요. 
req->responseData 이 변수가 바로 문자열(string) 입니다. 그 정보를 문자배열(char array)로 변환해서 저장을 하고 해당 배열로 rapidxml 에 넣어주니 정상적으로 변환이 되었습니다. rapidxml 의 print 함수를 이용하면 xml 의 전체 정보를 확인할 수가 있습니다.

#include "rapidxml.hpp"; 
#include "rapidxml_iterators.hpp" 
#include "rapidxml_utils.hpp"; 
#include "rapidxml_print.hpp"

using namespace std; 
using namespace rapidxml;

xml_document<char> xmlDoc;
				
std::vector<char> xmlData(req->responseData.begin(), req->responseData.end());
xmlData.push_back('\0');
char* xmlDataPtr = &xmlData[0];
					
xmlDoc.parse<0>(xmlDataPtr);		// 0 means default parse flags
print(std::cout, xmlDoc, 0);		// prints xmlDoc

char* node_name;
char* child_node_name;
char* node_value;
xml_node<char>* item;
xml_node<char>* subitem;
		
xml_node<char>* root = xmlDoc.first_node();													// first node of document, normally say root
xml_node<char>* area = root->first_node();													// child node of root node
for (item = root->first_node(); item; item = item->next_sibling()) {						// area
	for (subitem = item->first_node(); subitem; subitem = subitem->next_sibling()) {		// x, y, w, h, type, result
		node_name = subitem->name();
		node_value = subitem->value();
		cout << node_name << " = " << node_value << endl;
	}
}


참고로 rapidxml 은 
http://rapidxml.sourceforge.net 에서 확인 하실 수가 있습니다.

 

반응형