%F不返回任何输出

%F returns no output

本文关键字:输出 任何 返回      更新时间:2023-10-16

我正在编写代码,以自动编写标记为我们的web服务器在工作中,我遇到了麻烦,试图实现使用<ctime>头的strftime()在文本文件中自动插入日期。以下是相关代码:

if (yen(raw_input))
    {
        time_t rawtime;
        struct tm * timeinfo;
        time (&rawtime);
        timeinfo = localtime (&rawtime);
        strftime(buf, 10, "%F", timeinfo);
        strftime(cuf, 60, "%B %d, %Y", timeinfo);
        date = buf;
        longdate = cuf;
    }
...
ofstream mark;
const string filename = name + date + ".txt";
mark.open(filename);
mark << "{s5_mp3}http://www.####DELETED####.org/media/s5_mp3/" << date << "_" << name_cf << "_Sermon.mp3" << "{s5_mp3}n";
mark << hon << " " << name << ": ";
if (is_series) {mark << series << ": ";}
mark << title << "n";
mark << verse << "n" << longdate << "n";
mark.close();

第一个引号块以两种不同的格式将今天的日期插入到两个已经初始化的char缓冲区中,然后将它们存储到字符串中,第二个部分将所有内容写入到文件中。date格式为"YYYY- mm -DD(%F)",longdate格式为"Month DD, YYYY(%B %d, %Y)"。问题是当使用%F(通过调试确定)时,strftime无法向字符缓冲区写入任何内容。如果我将%F更改为同义语法"%Y-%m-%d",它将返回年和月,但日期是两个符号,它们被g++框掉了。令人困惑的部分是longdate工作完美,所以这不是timeinfo的问题。什么好主意吗?

您应该阅读strftime的标准定义。特别是兼容性部分说%F是:

在C99中引入(仅在c++ 11之后的c++实现中需要),遵从旧标准的库可能不支持