使用CString在C ++中重复一次char可变的次数

时间:2014-03-13 15:55:38

标签: 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);

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

2 个答案:

答案 0 :(得分:1)

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

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

编辑: 关于其他人发布的内容,澄清一点。

可以安全地假设您的项目设置为Unicode,否则您的_wfopen将无法编译。

混合std :: string和CString可能很奇怪,但在使用不同的接口时有时是必要的。

从std :: string.c_str()构造CString对于Unicode和ANSI构建来说都是完美的,因为如果使用Unicode构建并提供ANSI字符串,CString构造函数重载将负责转换,反之亦然。

使用'='符号初始化CString的方式也很好,并且有效。

唯一的问题是fprintf(和格式字符串),因为你正在使用Unicode构建,所以应该是fwprintf。

答案 1 :(得分:0)

CString构造函数按你的要求执行。问题出在您的环境中,以及如何打印出结果。

首先,您必须确定您是否正在使用Ascii(8位)或Unicode(16位)字符串。在你的例子中,你没有说清楚。我会假设它是Ascii。

其次,要将CString视为普通的旧C字符串,您必须将其强制转换。所以:

printf("%s", (LPCTSTR)equalSingsC);

如果使用流I / O,则不需要这样做。