我正在调试代码,其中包含以下行:
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。该文件将保存在哪里?
答案 0 :(得分:5)
sprintf写入字符串。它与写入文件无关。这意味着file_name
是一个字符串。你必须看看之后做了什么。
答案 1 :(得分:3)
sprintf
不会创建文件。它只允许您将格式化的字符串“打印”到您选择的缓冲区中。在您的情况下,看起来这样做是为了创建一个文件名。您需要添加另一行,如:
FILE *f = fopen(file_name, "w");
要创建并打开该文件以进行编写,如果这是您的目标。
答案 2 :(得分:2)
sprintf
不会将数据写入文件。它将数据写入字符串。在该调用之后,file_name将包含layer-123-234-out.csv
。
您需要查找fopen
或fwrite
等电话,这是实际写作的地方。
答案 3 :(得分:2)
int sprintf ( char * str, const char * format, ... );
将格式化数据写入字符串 如果在printf上使用了格式,则使用相同的文本组成一个字符串,但不是打印,而是将内容作为C字符串存储在str指向的缓冲区中。
你从哪里得到它写入文件?我想你不明白这个用法。 :)