C ++:传递给C运行时函数

时间:2018-01-15 12:30:10

标签: c++ qt

我正在尝试使用以下代码创建一个日志文件:

FILE* smartcutLogFile;

D1 = 0;
D2 = 0;
E2 = 0;
E3 = 0;
E4 = 0;
Z_EDGE = 0;

// save the detected values into the log file, and close it
    smartcutLogFile =  fopen ((QDateTime::currentDateTime().toString() + ".txt").toStdString().c_str() ,"w+t"); // get the datetime and append .txt at the end
    std::cout<<(QDateTime::currentDateTime().toString("yyyy-MM-dd hh.mm.ss") + ".txt").toStdString().c_str()<<std::endl;
    fprintf(smartcutLogFile, "D1: %f\n D2: %f\n E2: %f\n E3: %f\n E4: %f\n Z: %f\n", D1, D2, E2, E3, E4, Z_EDGE);
    fclose(smartcutLogFile);

所有这些双打(E2,E3等)实际上是我在LineEdits上可以看到的传感器的测量值,所以一切正常。但是,以下代码不会创建任何文件或任何内容,它会打印文件名:

2018-01-15 12.21.50.txt

但它不会创建任何内容,而是会提示数百次以下错误:

Invalid parameter passed to C runtime function.

我在哪里做错了?

编辑:我在以下行收到错误:

smartcutLogFile =  fopen ((QDateTime::currentDateTime().toString() + ".txt").toStdString().c_str() ,"w+t"); // get the datetime and append .txt at the end

1 个答案:

答案 0 :(得分:1)

在将日期/时间转换为字符串期间可能发生错误。 转换结果会给你带来无效的文件名,这可能是fopen函数失败的原因。

这应该有效:

(QDateTime::currentDateTime().toString("yyyy-MM-dd h.mm.ss") + ".txt").toStdString()).c_str()