想知道我做错了什么。我有一个文件(file.tmp),其内容为:c:\ users \ documents \ file \ folder \ myfile.txt。我想用这段代码读取tmp文件:
std::ifstream istream(csTempPath);
std::string s;
if (istream.is_open()){
int i = 1;
while (std::getline(istream, s))
{
CString cs;
cs.Format(L"Reading: %s", s);
OutputDebugString(cs);
i++;
}
istream.close();
}
else{
OutputDebugString(L"Could not read the temp file.");
}
我得到的输出是:
[4376] Reading: ??
[4376] Reading: ??
我希望它能得到这个:c:\users\documents\file\folder\myfile.txt
但是由于某些原因我得到了,我尝试了各种各样的方法,但我似乎不知道什么是错的。 BTW我是一名初学程序员。
答案 0 :(得分:2)
%s
格式说明符需要const char*
(或const wchar_t*
,具体取决于您的字符编码设置),但您传递的是std::string
对象。您需要调用其c_str成员:
CStringA cs;
cs.Format("Reading: %s", s.c_str());
OutputDebugStringA(cs);
或者,当使用Unicode字符编码时(如您所见):
CStringW cs;
cs.Format(L"Reading: %S", s.c_str());
OutputDebugStringW(cs);
请注意,后者使用Microsoft特定的扩展名,格式说明符类型%S
,用于执行ANSI编码和Unicode之间的字符编码转换。