我想我讀的地方,如果我通過一個nullptr到std::strftime,該函數將返回所需的緩衝區大小。事實上,下面的代碼工作得很好衆多Linux系統上,我試圖在(與VS儘管編譯時):std :: strftime返回值
#include <iostream>
#include <ctime>
#include <string>
int main()
{
std::time_t time{};
std::tm const * ltime = std::localtime(&time);
const char * formatString = "%Y-%b-%d";
//allocate buffer of appropriate size
auto requiredSize = 1 + std::strftime(nullptr, 50, formatString, ltime);
std::cout << "Required buffer size:" << requiredSize << "\n";
//Format time to string
std::string buff(requiredSize, ' ');
std::strftime(&buff[0], requiredSize, formatString, ltime);
std::cout << buff << std::endl;
}
但是,我無法找到我的原始來源或任何其他文件是會指定這種行爲。所以我的問題是:
- 在哪些系統/編譯器/標準庫實現(如果有)這是一個保證的行爲?
- 我在哪裏可以找到相應的文檔?
編輯:我添加e標記,因爲我已經看到了等價的C代碼和至少用gcc /克相同的結果++(或更確切地說的glibc /的libstdC++)std::strftime
可能只是針對C-別名無論如何,功能strftime
。
IIRC你聲稱的作品。我認爲cppreference需要關於這方面的更新。 –
文檔:查看最新的C++標準草案之一。它記錄了庫函數(但可能通過引用C標準)。請注意,有一條通用規則「除非明確聲明可以將庫傳遞給庫函數,否則不能傳遞NULL」。 –
@πάνταῥεῖ:問題在於,既不在C也不在C++標準中(至少在我可以在互聯網上找到的版本中),我可以找到對此的任何參考。在我測試過的linux系統上的相關手冊頁中也沒有。 – MikeMB