buf = string ( buf.c_str () )

投稿日 by Iwao

先日の共通のコードでのバグ.

tstring	ask_cli	(LPCTSTR msg=_T(""))
{
	tstring	cli ;
	while(true)	{
		tstring	buf ;
		buf.resize(1000) ;
		std::terr << msg ;
		std::tin.getline(&buf[0],std::streamsize(buf.size())) ;
	//	buf = ::QuotM_Del_All(buf.c_str()) ;
		if      (buf == _T("q"))	{	break ;		}
		else if (buf == _T("Q"))	{	break ;		}
		if (buf.empty())         	{	continue ;	}
		cli = buf.c_str() ;
		break ;
		}
	return	cli ;
	}

ループを抜けるために “q” や “Q” と比較している部分が機能しない(break しない).
原因は “q\0\0\0…” と “q\0” を比べているため.
そのため,比較する前に次の様にするとうまく機能する.

{
	tstring	tmp = buf.c_str() ;
	buf = tmp ;
	}

MFC であれば CString::ReleaseBuffer(-1) が使えるが…
buf = tstring(buf.c_str()) とすることで対応.
buf = string ( buf.c_str() )


CString , std::string , …

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。