-6

我正在调试具有以下行的代码:

    char file_name[128];
      sprintf(file_name, "layer-%03d-%02d-out.csv", c, i);
       CSV::SaveVector(file_name, current_vector);

int SaveVector(const std::string &filename, const Perceptron::EigenVector &v) {
  FILE *fp = fopen(filename.c_str(), "w");
  if (!fp) {
    MinLog("Failed to open file %s\n", filename.c_str());
    return FILE_ERROR;
  }

  for (int i = 0; i < v.size(); ++i) {
    fprintf(fp, "%s%.16lf", (i>0 ? " ," : ""),  static_cast<double>(v[i]));
  }

  fclose(fp);

  return NO_ERRORS;
}

该语句没有给出任何错误,但我在当前文件夹的任何位置都找不到 file_name。该文件将保存在哪里?

4

4 回答 4

5

sprintf 写入一个字符串。它与写入文件无关。这意味着file_name是一个字符串。之后您将不得不查看如何处理。

于 2013-07-26T21:04:35.167 回答
3

sprintf不创建文件。它只允许您将格式化的字符串“打印”到您选择的缓冲区中。在您的情况下,看起来这样做是为了创建文件名。您需要添加另一行,例如:

FILE *f = fopen(file_name, "w");

如果这是您的目标,则创建并打开该文件以进行写入。

于 2013-07-26T21:04:52.510 回答
2

int sprintf ( char * str, const char * format, ... );

将格式化数据写入字符串 使用与 printf 上使用 format 时将打印的相同文本组成字符串,但不是打印,而是将内容作为 C 字符串存储在 str 指向的缓冲区中。

你从哪里得到它写入文件的?我想你不明白这个的用法。:)

http://www.cplusplus.com/reference/cstdio/sprintf/

于 2013-07-26T21:06:57.307 回答
2

sprintf不将数据写入文件。它将数据写入字符串。在那次调用之后, file_name 将包含类似layer-123-234-out.csv.

您需要查找类似fopenor的调用fwrite,这是实际写入发生的地方。

于 2013-07-26T21:04:27.577 回答