programing

ctime()에 의해 반환된 문자열에 줄바꿈이 포함되어 있는 이유는 무엇입니까?

randomtip 2022. 7. 14. 21:05
반응형

ctime()에 의해 반환된 문자열에 줄바꿈이 포함되어 있는 이유는 무엇입니까?

에 의해 문자열이 반환되는 이유는 무엇입니까?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?
$ 

큰 문제는 아닙니다.문자열에서 마지막 바이트를 삭제할 수 있는데 왜ctime()애초에 거기에 놔둘까?

C99 논거에 따르면, 새로운 라인은 기존의 관행 때문에 존재하며, 이는 역사적 이유로 말하는 것과 같다고 생각합니다.

국제표준의 근거 - 프로그래밍 언어 - C © 7.23.3.1asctime기능.

이 함수의 명칭은 ASCII 종속성을 기준서에서 제거한다는 원칙과 상충됨을 시사하지만, 그 명칭은 선행기술로 인해 유지되었다.기존 관행과 동일한 이유로 문자열 형식에서 줄바꿈 문자를 삭제하자는 제안은 채택되지 않았습니다.

이것은 에 대해 설명합니다.asctime단, 그 이후로는ctime와 동등하다asctime(localtime(timer))그래서 같은 규칙이 적용됩니다.

POSIX Standard는 과거의 호환성을 주장하고 있습니다.

이전 구현과의 호환성을 위해 [asctime]이 포함되어 있습니다.최대의 휴대성을 실현하려면 , 애플리케이션은 strftime()을 사용할 필요가 있습니다.

오래된 구현과의 호환성을 위해 포함되어 있는 것을 고려하면 일부 오래된 라이브러리가 구현되어 있다고 가정하는 것이 타당합니다.asctime마지막에 새로운 행을 붙여서

이 동작은 ISO 9899:1990 사양에 정의된 대로 필요합니다.

7.12.3.1 The asctime function

The asctime function converts the broken-down time in the structure
pointed to by timeptr into a string in the form

         Sun Sep 16 01:03:52 1973\n\0

7.12.3.2 The ctime function

The ctime function converts the calendar time pointed to by timer to
local time in the form of a string.  It is equivalent to 

         asctime(localtime(timer))

원래 Unix에서 날짜 프로그램을 구현해야 했기 때문일 수 있습니다. (shell의 줄 바꿈)그래서 아마 역사적인 이유일 것이다.

원하는 형식(새 행이 없는 형식)을 사용하려면strftime()대신.형식 문자열"%c"줄 바꿈 없이 대략 같은 형식을 제공합니다.

asctime()man 페이지에는 반환된 문자열에 끝 늘 문자 앞에 끝 줄바꿈 문자가 있음을 나타냅니다(강조하지 않습니다).이 정보가 에 존재하지 않는 이유ctimeman page는 미스터리다.

언급URL : https://stackoverflow.com/questions/19543997/why-does-the-string-returned-by-ctime-contain-a-line-feed

반응형