sprintf在哪里存储文件

时间:2013-07-26 21:02:11

标签: c++

我正在调试代码,其中包含以下行:

    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 个答案:

答案 0 :(得分:5)

sprintf写入字符串。它与写入文件无关。这意味着file_name是一个字符串。你必须看看之后做了什么。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

之类的内容

您需要查找fopenfwrite等电话,这是实际写作的地方。

答案 3 :(得分:2)

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

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

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

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