无法在 C++ 中初始化 char
can't initialize char in C++
我使用 <fstream>
创建了一个保存文本文件的函数。
void save(AnsiString flName, AnsiString &YourText) {
char saving[strlen(YourText.c_str())]; // << ERROR
strncpy(saving, YourText.c_str(), sizeof(saving) - 1);
ofstream ok(flName.c_str(), ios::out);
ok << saving;
ok.close();
}
我在第 2 行遇到问题。说:需要常量表达式
你能帮帮我吗?是否有其他更有效的保存文本文件的方法?
该错误是由于试图创建一个需要固定大小的数组造成的。
为了解决这个问题,请使用 std::vector。但是,在你的情况下,使用这个:
ofstream out(flName.c_str());
out << YourText;
顺便说一句:您需要阅读 C++ 教程。绝对地。您的代码包含太多问题,以至于很难开始,例如多个一次性错误、未能使用 C 风格字符串(即以 NUL 结尾的字符串)以及对 C++ 中资源管理的一般理解。此外,您没有任何错误处理。常量正确性。
您不能像那样初始化动态大小的数组。您必须通过动态分配(例如 malloc 或 new)创建它
所以你需要:
void save(AnsiString flName, AnsiString &YourText) {
char* saving = new char[strlen(YourText.c_str())];
strncpy(saving, YourText.c_str(), sizeof(saving) - 1);
ofstream ok(flName.c_str(), ios::out);
ok << saving;
delete[] saving;
ok.close();
}
堆栈分配,需要在编译时知道分配的大小。编译器无法提前知道 YourText 的长度。
这段代码可以大大简化,但超出了这个问题的范围。如果您想获得一些关于如何重写它的建议,请随时开始聊天。
数组的大小应该是一个常量;
您不能使用变量
初始化大小
我使用 <fstream>
创建了一个保存文本文件的函数。
void save(AnsiString flName, AnsiString &YourText) {
char saving[strlen(YourText.c_str())]; // << ERROR
strncpy(saving, YourText.c_str(), sizeof(saving) - 1);
ofstream ok(flName.c_str(), ios::out);
ok << saving;
ok.close();
}
我在第 2 行遇到问题。说:需要常量表达式
你能帮帮我吗?是否有其他更有效的保存文本文件的方法?
该错误是由于试图创建一个需要固定大小的数组造成的。
为了解决这个问题,请使用 std::vector。但是,在你的情况下,使用这个:
ofstream out(flName.c_str());
out << YourText;
顺便说一句:您需要阅读 C++ 教程。绝对地。您的代码包含太多问题,以至于很难开始,例如多个一次性错误、未能使用 C 风格字符串(即以 NUL 结尾的字符串)以及对 C++ 中资源管理的一般理解。此外,您没有任何错误处理。常量正确性。
您不能像那样初始化动态大小的数组。您必须通过动态分配(例如 malloc 或 new)创建它
所以你需要:
void save(AnsiString flName, AnsiString &YourText) {
char* saving = new char[strlen(YourText.c_str())];
strncpy(saving, YourText.c_str(), sizeof(saving) - 1);
ofstream ok(flName.c_str(), ios::out);
ok << saving;
delete[] saving;
ok.close();
}
堆栈分配,需要在编译时知道分配的大小。编译器无法提前知道 YourText 的长度。
这段代码可以大大简化,但超出了这个问题的范围。如果您想获得一些关于如何重写它的建议,请随时开始聊天。
数组的大小应该是一个常量; 您不能使用变量
初始化大小