我正在尝试编写一个函数来更改某些文件夹名称,但我在实际声明中遇到了困难。
这是我的代码:
void ChangeVersion(char* NewVer)
{
ifstream show_current_version;
show_current_version.open(*removed*);
char show_current_version_var[1024];
if (show_current_version.is_open())
{
while (!show_current_version.eof())
{
show_current_version >> show_current_version_var;
}
}
show_current_version.close();
// show_current_version_var is old version
char OldVersion[1024] = show_current_version_var;
// start rename
cout << "Changing versions...";
rename("*removed*", OldVersion);
rename(NewVer, "*removed*");
cout << "done!" << endl;
}
正如你所知,我是c ++的新手......
我已经阅读过各种c ++教程网站,如果你想要一个函数不返回任何内容,那么你将它声明为void。但是,当我这样做时,我的编译器说无效的初始化程序。我正在使用dev-cpp。
我在想这是因为我的功能是输出文本,但在网站上,void函数有一些cout语句......
我尝试用char *初始化它,就像我的其他函数一样,但我得到了同样的错误。与int和char相同。
感谢您的阅读。
答案 0 :(得分:1)
你真的应该仔细看看编译器的输出。它通常会告诉您哪行包含错误,这可以为您提供很多帮助。
针对特定问题找出违规行(来自我收集的内容,还没有尝试过编译):
char OldVersion[1024] = show_current_version_var;
您不能将变量分配给这样的静态数组。只有少数可以用来初始化静态数组的东西。例如:
char OldVersion[1024] = "Static string";
char example[1024] = { 0 };
尝试做:
char OldVersion[1024];
strncpy(OldVersion, show_current_version_var, 1024);
// Null-terminate the string for good measure
OldVersion[1023] = 0;
或者只使用show_current_version_var
您将使用OldVersion
(我认为没有理由在您粘贴的代码中复制字符串)。
无论如何,我不知道你想要完成什么,但你真的应该阅读C ++。这是一种相当棘手的语言。
答案 1 :(得分:1)
一些小事
当您发布代码时,发布我们编译它所需的所有内容:
// You need these to make it compile.
#include <iostream>
#include <fstream>
using namespace std;
行。错误:
show_current_version.open(*removed*);
^^^^^^^^^ What is this supposed to be ?
此函数需要一个C-String。所以“删除”是有效的。但是明星*
没有意义。
char OldVersion[1024] = show_current_version_var;
你无法像这样复制数组:
char OldVersion[1024];
std::copy(show_current_version_var, show_current_version_var+1024, OldVersion);
更好的是使用std :: vector而不是数组。然后你就可以复制了。
std::vector<char> show_current_version_var(1024);
// STUFF
std::vector<char> OldVersion(show_current_version_var);
或者,如果你专门存储字符串(不是字符blo),那么std :: string可能是你最好的选择。
答案 2 :(得分:0)
我认为你不能这样做:
char OldVersion[1024] = show_current_version_var;
您只能使用大括号列表初始化数组(例如{'p', 'a', 'x'}
)。
相反,你应该尝试:
char OldVersion[1024];
memcpy (OldVersion, show_current_version_var, sizeof (OldVersion));
完整的可编辑版本如下所示:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
void ChangeVersion(char* NewVer)
{
ifstream show_current_version;
show_current_version.open("qqq");
char show_current_version_var[1024];
if (show_current_version.is_open())
{
while (!show_current_version.eof())
{
show_current_version >> show_current_version_var;
}
}
show_current_version.close();
// show_current_version_var is old version
char OldVersion[1024];
memcpy (OldVersion, show_current_version_var, sizeof (OldVersion));
// start rename
cout << "Changing versions...";
rename("*removed*", OldVersion);
rename(NewVer, "*removed*");
cout << "done!" << endl;
}
int main() {
return 0;
}