C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[73539] 파일패스 습득중 문자열변수에대한 질문입니다.
낭천 [ktshas] 4452 읽음    2016-04-12 13:04
c++로 프로젝트의 파일패스를 추출해서 문자열에넣고 그걸 이용해서 처리를 하려는데...정말 이상한점이 있습니다.
문자열 변수에 넣었을때 잘 들어가나 싶은데 메소드를 빠저나가거나..try문안에서 실행했을때 try를 빠저나가면 패스를 넣었던 문자열이 비어버립니다.
IniFileController::IniFileController()
{
	numOfServer = "NumberOfServer";
	section = "AP_SERVER";
	fileName = "AP_SERVER_LIST.ini";

	_TCHAR* splitBuf;
	_TCHAR* splitContxt;
	CString exeName;
	CString projectPath;

	_TCHAR buf[1024];
    GetModuleFileName(0,buf,1024);

	projectPath = buf;
	splitBuf = buf;
	splitBuf = strtok_s(buf, "\\", &splitContxt);
	while(strtok_s(NULL, "\\",  &splitContxt) != NULL)
	{
		splitBuf = strtok_s(NULL, "\\",  &splitContxt);
	}
	exeName = splitBuf;
	projectPath.Replace(exeName, fileName);

	iniPath = projectPath;
}

컨스트럭터에서 iniPath에 습득한 문자열을 넣었습니다. iniPath는 LPCTSTR형이고 h파일에서 정의했습니다.
마지막줄의 iniPath = projectPath; 를 보면 iniPath에 값이 잘 들어가 있는데 그 다음 줄의 } 에 가면
iniPath에 잘못된 문자가 들어있습니다 어쩌고 저쩌고 합니다...

그리고 위의 컨스트럭터 아래에 다음 메소드가 있습니다.

bool IniFileController::GetNumServer()
{
	//設定ファイルのNumberOfServer取得
	try
	{
		//iniファイルの存在を確認する
		if(!fileChecker.GetFileExists(iniPath))
		{
			LPCTSTR err = "設定ファイルがモジュールと同じ場所に存在しません。\n";
			throw err;
		}
	}
	catch(LPCTSTR err)
	{
		std::cout << err;
		return false;
	}
	return true;
}


여기서 iniPath를 사용하는데요...컨스트럭터에서 마지막에 이상한게 들어갔기때문에 역시나 여기서도 이상한게 들어가있는 그대로입니다...컨스트럭터에 하고있는 iniPath에 값 넣는 처리를 그대로 컨스트럭터가 아닌 다른 메소드에서 실행하거나 해도 같은 현상이 일어납니다.

아래와 같이 할 경우에는 원하는 처리를 얻을 수 있기는 합니다..

bool IniFileController::GetNumServer()
{
	//設定ファイルのNumberOfServer取得
	try
	{
	_TCHAR* splitBuf;
	_TCHAR* splitContxt;
	CString exeName;
	CString projectPath;

	_TCHAR buf[1024];
    GetModuleFileName(0,buf,1024);

	projectPath = buf;
	splitBuf = buf;
	splitBuf = strtok_s(buf, "\\", &splitContxt);
	while(strtok_s(NULL, "\\",  &splitContxt) != NULL)
	{
		splitBuf = strtok_s(NULL, "\\",  &splitContxt);
	}
	exeName = splitBuf;
	projectPath.Replace(exeName, fileName);

	iniPath = projectPath;
		//iniファイルの存在を確認する
		if(!fileChecker.GetFileExists(iniPath))
		{
			LPCTSTR err = "設定ファイルがモジュールと同じ場所に存在しません。\n";
			throw err;
		}
	}
	catch(LPCTSTR err)
	{
		std::cout << err;
		return false;
	}
	return true;
}


이렇게 할경우 iniPath를 습득해서 바로 쓰기때문에 뭐..일단 정상적으로 되긴합니다만...이 현상이 이해가 안갑니다..
나름 변수를 포인터로도 바꿔보고 해봤는데 해결이 안되네요...도대체 왜이러는 걸까요..ㅠ

+ -

관련 글 리스트
73539 파일패스 습득중 문자열변수에대한 질문입니다. 낭천 4452 2016/04/12
73544     Re:파일패스 습득중 문자열변수에대한 질문입니다. 송신영 4538 2016/04/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.