为什么ctime()返回的字符串的最后一个字符是换行符(0x0A)?例如,此代码:

#include <iostream>
#include <cstdlib>

int main(int argc, char* argv[])
{
    time_t now;
    time(&now);
    char* time_str = ctime(&now);
    std::cout << time_str << "why is this on a new line?" << std::endl;
    return 0;
}

.生成以下输出:

$ ./time.exe
Wed Oct 23 14:52:29 2013
why is this on a new line?
$ 

这没什么大不了的;我可以从字符串中go 掉最后一个字节,但是为什么ctime()会把它放在第一位呢?

推荐答案

根据C99的基本原理,新线的存在是因为existing practice,我认为这与出于历史原因的说法是一样的.

Rationale for International Standard — Programming Languages — C §7.23.3.1 The asctime function

尽管此函数的名称与删除ASCII的原则相冲突

这意味着asctime,但由于ctime相当于asctime(localtime(timer)),所以同样的规则适用.

C++相关问答推荐

有什么方法可以检测SunOS上的SparcWorks吗?

变量的const视图是否定义良好?

设计处理各种数据类型的方法和数据 struct

如何避免重新分配指针数组时,我们从一开始就不知道确切的大小

C中出现分段错误后关闭文件

如何正确地索引C中的 struct 指针数组?

Tiva TM4C123GXL的I2C通信

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

无效指针值在函数调用之间莫名其妙地改变

仅在给定的大小和对齐方式下正确创建全局

ATmega328P EEPROM未写入

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

轮询libusb_pollfd struct 列表的正确方式是什么?

不同原型的危险C函数是可能的

C11/C17标准允许编译器清除复合文字内存吗?

Realloc():中止的下一个大小无效(核心转储)

传递给函数的 struct 中的数组

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

为什么写入关闭管道会返回成功