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]