无法在 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 的长度。

这段代码可以大大简化,但超出了这个问题的范围。如果您想获得一些关于如何重写它的建议,请随时开始聊天。

数组的大小应该是一个常量; 您不能使用变量

初始化大小