C++ 在C+;中以可变的次数重复一个字符+;使用CString
我正在使用C++ 在C+;中以可变的次数重复一个字符+;使用CString,c++,file-io,mfc,C++,File Io,Mfc,我正在使用fprintf将数据输出到.txt文件。到目前为止,我已经: FILE * pFile; CString equalSignsC('=', 80); CString FileName(name.project.c_str()); FileName += "Stats.txt"; pFile = _wfopen(FileName, _T("w")); fprintf(pFile, "%s", equalSignsC); fclose(pFile); 我想创建一个CString,将字符'
fprintf
将数据输出到.txt文件。到目前为止,我已经:
FILE * pFile;
CString equalSignsC('=', 80);
CString FileName(name.project.c_str());
FileName += "Stats.txt";
pFile = _wfopen(FileName, _T("w"));
fprintf(pFile, "%s", equalSignsC);
fclose(pFile);
我想创建一个CString,将字符
'='
重复80次,但当我查看输出时,'='
只打印一次。在写入文件时,我希望避免使用流的,
,也希望避免使用循环打印等号。想法?问题在于,您混合了ANSI/UNICODE函数和数据类型,您使用对UNICODE正确的_wOpen打开,但尝试使用ANSI版本的函数(fprintf)编写UNICODE字符串
fwprintf(pFile,L“%s”,相等信号)代码>解决您的问题
编辑:
澄清一下其他人发布的内容
可以安全地假设您的项目设置为Unicode,否则您的wfopen将无法编译
混合使用std::string和CString可能很奇怪,但有时在使用不同接口时是必要的
从std::string.c_str()构造CString对于Unicode和ANSI构建来说都是非常好的,因为如果您使用Unicode构建并提供ANSI字符串,CString构造函数重载将负责转换,反之亦然
您使用“=”符号初始化CString的方法也非常好,并且可以正常工作
唯一的问题是fprintf(和格式字符串),它应该是fwprintf,因为您使用的是Unicode构建。CString构造函数会按照您的要求执行。问题在于您的环境以及如何打印结果
首先,您必须确定您使用的是Ascii(8位)还是Unicode(16位)字符串。在你的例子中,你没有清楚地说明这一点。我假定它是Ascii码
第二,要将CString当作普通的旧C字符串来处理,必须对其进行强制转换。因此:
printf("%s", (LPCTSTR)equalSingsC);
<> P>这是不需要的,如果你使用流I/O < /P>混合MFC,C++ <代码> STD::String < /C>和C IO?为什么不选一个呢?您应该会看到一些警告。@user2246631-请告诉您,如果您的项目设置的字符集类型为Unicode,则此代码将完全失败。你的项目设置是什么?另外,将std::string与MFC cstring混合使用也不是一个好主意,这都是因为字符集类型。[OT]为什么不使用CFile及其派生词?[/OT]