无法在C ++中初始化char

时间:2015-02-05 07:25:55

标签: c++ c++builder

我创建了一个使用<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行遇到问题。说: 需要持续表达

你可以帮我吗?是否还有其他更有效的方法来保存文本文件?

3 个答案:

答案 0 :(得分:1)

错误是由尝试创建一个需要恒定大小的数组引起的。

为了解决这个问题,请使用std :: vector。但是,在您的情况下,请使用此:

ofstream out(flName.c_str());
out << YourText;

BTW:您需要阅读C ++教程。绝对。您的代码包含很多难以启动的问题,例如多个一次性错误,无法使用C风格的字符串(即NUL终止的字符串)以及缺乏对C ++中资源管理的理解。此外,您没有任何错误处理。正确性。

答案 1 :(得分:0)

您不能像这样初始化动态大小的数组。您必须通过动态分配(例如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的长度。

此代码可以大大简化,但它超出了这个问题的范围。如果你想要一些关于如何重写它的指示,请随意开始聊天。

答案 2 :(得分:0)

数组的大小应该是常量; 您无法使用变量

初始化大小