관리 메뉴

kisoo

_vsntprintf 함수에서 '%' character 인식 문제 본문

01.About Programming /9..VC++

_vsntprintf 함수에서 '%' character 인식 문제

JamesK78 2013. 8. 2. 16:34

포맷스트링을 통한 삽질....


아래 함수는 많은 매개변수를 받아서 하나의 스트링으로 만들어주는 일반적인   함수 로직이다.



CString WriteFormatString(const char * _Format, ...)

{

TCHAR text[1024*10]={0,};


va_list args;


va_start(args, _Format);


_vsntprintf(text, sizeof(text), _Format, args );


return text;


}


 //HTML 원본파일을 오픈하여 모두 읽어 들인다.

if(file.Open("D:\\releasenote_cloud2.html",CFile::modeRead,NULL))

{

UINT length=(UINT)file.GetLength();

char* ch_temp = new(char[length+1]);//파일 길이만큼 할당 

ZeroMemory(ch_temp,length+1);//메모리초기화 

file.Read(ch_temp,length);



   //HTML 파일에서 읽어들인 각 변수에 해당 값을 넣는다.

   //HTML 파일 안에는 변수값을 받을 곳에 %s 가 있다.

sHtml = WriteFormatString(ch_temp,"MF-12-TEST","2013-08-02              12:30",sCollect1,sCollect2,sCollect3,sCollect4,sMal1,sMal2,sMal3,sMal4);



          //변수 값을 넣은 후 다시 다음과 같이 저장한다. 

        if(file.Open("D:\\test2.html",CFile::modeCreate|CFile::modeWrite,NULL))

{

file.WriteString(sHtml);

file.Close();

}

}

 


문제는 여기서 시작된다. 

HTML 안에는 %  문자열이 많이 들어 있는데. WriteFormatString 함수를 거치면 %가 모두 사라진다. 


삽질좀 한 후에 찾아낸 것은 다음과 같다. 

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html


저기에 보면 %% 연접해 있을 때  CHARACTER '%' 로 인식된다. 


HTML 파일 내에 내가 선언한 %s 를 제외한 % 문자는 모두 %% 로 변경 한 후 하니까 정상적으로 저장이 된다. 



삽질 2시간 했음~




Comments