我有一个简单的问题,如果我想在系统时间输出的同一行上打印一个值,可以吗?
char *date;
time_t timer;
timer=time(NULL);
date = asctime(localtime(&timer));
//printf("Current Date: %s", date);
std::cout << date << ", " << randomNumber << std::endl;
if (file.is_open())
{
file << date;
file << ", ";
file << randomNumber;
file << "\n";
}
我希望会发生的是,我将得到它作为输出:
Wed Jan 16 16:18:56 2013, randomNumber
但是我最终进入文件的是:
Wed Jan 16 16:18:56 2013
, randomNumber
而且,我只是做了一个简单的std :: cout,我注意到了相同的结果。看来系统会在输出的末尾强制使用一条终点线,无论如何,我可以禁止它吗?
您只可以用'\ 0'替换日期字符串中的'\ n'字符(如果终止为null,则应在strlen(date)-1处,并且应该在同一行上打印。
date[strlen(date) - 1] = '\0';
编辑:正如Joachim strlen
指出的那样,返回没有NULL终止符的长度而不是原始分配长度,因此它应该是-1而不是-2。
换行符是asctime
返回的字符串中的最后一个字符。删除它的最简单方法是用字符串终止符'\0'
替换它。
关于Windows的注意事项:Windows的换行符,回车符'\r'
和常规换行符'\n'
具有two个字符。因此,在Windows上,您必须在second最后一个字符处终止。如果要使代码在Windows和非Windows平台之间可移植,则必须为此添加检查。
如果您想使用字符串,则有更好的选择。
这对我有用:
#include<iostream>
#include<chrono>
#include<ctime>
using namespace std;
string getDate()
{
chrono::system_clock::time_point tp = chrono::system_clock::now();
time_t t = chrono::system_clock::to_time_t(tp);
const char * tc = ctime(&t);
string str = string {tc};
str.pop_back();
return str;
}
int main(){
cout << getDate() << endl << hi;
}
输出:
Mon Dec 7 17:40:01 2015
hi
日期= date.substr(0,date.size()-1);
这会工作..