只打印第一个字母
FPrintf CString printing out only the first letter?
我想使用fprintf打印出一些cstring以及一些更多的文本:
CString project = "Project";
FILE * pFile;
CString FileName = project + "_Stats.txt";
pFile = _wfopen(FileName, _T("w"));
fprintf(pFile, "Project Name: %s", project);
创建的文件名为"Project_Stats.txt",输出应该是"项目名称:项目",但是我得到的是"项目名称:p"。为什么只有第一个字母被打印出来,我有办法解决这个问题吗?
pm100给出了正确的答案,然后删除了它- UNICODE CString
的正确代码是%ls
,而不是%s
。
fprintf(pFile, "Project Name: %s", project.GetBuffer());
函数fprintf(FILE*, char*, ...)
不知道项目应该具有什么类型。因此,编译器将编译任何类似于强制转换为void*
的内容。当你想要一个char*
时,你必须使用CString的GetBuffer()
成员。
这是因为CString在UNICODE中,所以要将ANSI文本写入文件,首先将其转换为多字节,即:
CStringA projectA(project);
然后:
fprintf(pFile, "Project Name: %s", projectA.GetString());
Try
fprintf(pFile, "Project Name: %s", (const char_t*)project);
或
fprintf(pFile, "Project Name: %s", (const wchar_t*)project);
详细信息请参阅本主题http://msdn.microsoft.com/en-us/library/72b2swax.aspx
我现在没有MFC,但在Win32++中以下工作正常(我有1252代码页,因此俄语字符不在1252代码页中,cpp文件也保存为UTF-8带BOM):
Win32xx::CString project{L"Z:\Projectцц"};
FILE * pFile;
Win32xx::CString FileName{project + L"_Staпрпфts.txt"};
pFile = _wfopen(FileName.GetBuffer(FileName.GetLength()), _T("w, ccs=UTF-16LE"));
fwprintf(pFile, L"Project Name: %s", project.GetBuffer(project.GetLength()));
在Win32中永远不要混合使用Unicode和ANSI方法。这也指的是字符串字面值,使用_T宏或总是使项目Unicode,并使用L"作为字符串字面值。也许最好习惯使用boost::filesystem(将包含在下一个标准中)之类的东西来处理文件路径,使用c++流来格式化。要记住的一件事是,在Windows中正确处理Unicode是一种不断尝试的方法,直到你把它弄对为止。
相关文章:
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 使用哈希图打印第一个重复元素;
- 为什么数组不打印第一个元素?
- C++ Expat 仅打印元素的第一个字母和标签中的数据
- 只有我的"链接列表"中的第一个节点正在打印
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- 如何打印出常量字符串的第一个元素?
- 同一范围内矢量的两个独立"for"循环,仅打印第一个循环
- 链接列表正在抛出异常,而不是打印第一个节点
- 为什么我的函数没有打印出双向链表中的第一个节点?
- 如何打印变量的第一个输入/值?C
- 为什么'std::string'中第一个元素的地址打印为整个字符串?
- C / SFML:使用两个递归调用在屏幕上打印凸形形状仅显示第一个递归调用中的形状,而不是第二个
- 输出是从您输入的矩阵中打印出矩阵的转置,但我的代码只是打印出您输入的第一个矩阵
- 给定一个数字n,打印序列中大于或等于n的第一个数字
- 打印出现一次的字符串数组的第一个元素
- 打印由用户定义的数组,第一个数字确定单词的大小,第二个数字确定行的大小
- C++ fprintf 只打印第一个字符串
- 使用 getline(cin,n) 输入;没有打印第一个输入,我没有使用 CIN >> 在任何地方输入
- 无法在前面有多余空格的情况下获取要打印的数组.只有第一个值会用空格打印