在c++中使用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);

我想创建一个重复字符'=' 80次的CString,但是当我查看我的输出时,'='只打印一次。我想在写入文件时避免使用ofstream,我也想避免使用循环来打印等号。想法吗?

问题是你混合了ANSI/UNICODE函数和数据类型,你用_wfopen打开,这对UNICODE是正确的,但试着用函数的ANSI版本(fprintf)写一个UNICODE字符串。

fwprintf(pFile, L"%s", equalSignsC);解决你的问题。

编辑:澄清一下其他人发布的内容。

可以安全地假设您的项目设置为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);

如果使用流I/o,则不需要

相关内容

  • 没有找到相关文章

最新更新