ホーム » gcc » buf = string ( buf.c_str () )

2022年10月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

カテゴリー

アーカイブ

ブログ統計情報

  • 79,957 アクセス



buf = string ( buf.c_str () )

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

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 , …

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.
%d人のブロガーが「いいね」をつけました。