我使用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,则不需要