所以我一直在使用文件流,我想出了一个问题。每次我尝试保存文件时,创建的文件的名称都以这两个字符结尾:i' 。 有什么方法可以解决这个问题吗?
这是我得到的:
这是我的代码:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <windows.h>
#include <cstdlib>
#include <stdio.h>
#include <cstdio>
#include <fstream>
using namespace std;
string p = "";
string some_string;
char o[20];
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Choose a name for your file: ";
getline(cin, p);
if (p.length() >= 20)
{
cout << "Max character length: 20 characters\n\n";
system("pause");
exit(EXIT_SUCCESS);
}
else
{
ofstream out("resources");
out.trunc;
out << p;
out.close();
}
for (int i = 0; i < 20; i++)
{
o[i] = ' ';
}
for (unsigned int t = 0; t < p.length(); t++)
{
o[t] = p.at(t);
}
ofstream save(o);
save << some_string;
save.close();
cout << "A new file named: '" << p << "' was created\n";
Sleep(2500);
}
(我使用Microsoft VS 2013)
提前致谢!
答案 0 :(得分:1)
您已将o
预先初始化为所有空格,但这无用。你应该做的是写一个&#39; \ 0&#39;到你的文件名的最后一个字符之后的字符。否则阵列是非终止的,你可能会得到垃圾&#34;最后,当你将它用作C字符串时。
所以:
for (unsigned int t = 0; t < p.length(); t++) {
o[t] = p.at(t);
}
o[p.length()] = '\0';
您还应该将错误消息更改为以下内容,以使其准确无误:
cout << "Max character length: 19 characters\n\n";
如果你对std::string
使用o
会更容易,那么你根本不必弄乱char
数组和循环。事实上,由于o
只是p
中字符的副本,因此您可以完全忘记o
,只使用p
本身:
ofstream save(p);
那就是说,在C ++ 03中,你可能必须从p
获得一个C字符串,因为ofstream
构造函数还没有接受std::string
:
ofstream save(p.c_str());
(我不记得,但我认为MSVS无论如何都允许std::string
参数。)