-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

sprintfファイルにデータを書き込みません。データを文字列に書き込みます。その呼び出しの後、 file_name には次のようなものが含まれますlayer-123-234-out.csv

実際の書き込みが行われる場所であるfopenorのような呼び出しを探したいと思うでしょう。fwrite

于 2013-07-26T21:04:27.577 に答える
2

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

フォーマットされたデータを string に書き込みます format が printf で使用された場合に出力されるテキストと同じテキストで文字列を作成しますが、内容は出力される代わりに、str が指すバッファーに C 文字列として格納されます。

ファイルに書き込むことはどこで得ましたか? この使い方を理解していないと思います。:)

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

于 2013-07-26T21:06:57.307 に答える