2011-09-19 3 views
0

로컬 시간을 char 변수에 저장하려고합니다. 여기 내가 사용한 코드가 있습니다. 사전에시스템 시간을 cpp의 변수에 저장합니다.

#include <stdio.h> 
#include <time.h> 

struct tme 
{ 
    char intime; 
}e; 
void main() 
{ 

    char timeStr [9]; 
_strtime(timeStr); 
    e.intime=timeStr; 
    printf("The current time is %s \n", timeStr); 
} 

고맙습니다 :하지만

는 "숯불 *이 숯불을 변환 할 수 없습니다"말하는

여기 내 코드입니다.

+0

'_strtime'은 Windows 기능이며, 코드 스 니펫을 비표준으로 렌더링합니다. 친절하게'const time_t current = time (NULL); (비추천) Windows 전용 함수에 따라 불필요하게 코드가 작성되지 않기 때문에 strftime (timeStr, 9, "% H : % M : % S", localtime (& current)); . – DevSolar

답변

0

간단합니다. 길이가 9 인 문자 배열 timeStr을 가지고 char intime에 할당하려합니다. 형식이 호환되지 않습니다. char[]은 결코 char과 같지 않습니다.

다음과 같이이 문제를 해결할 수 (하지만 난 당신이 달성하려는 모르겠어요) :

struct tme 
{ 
    char* intime; 
}e; 

PS가 : MSDN이 상태가 (_strtime) :

// 참고 : _strtime은 더 이상 사용되지 않습니다. 유형 char [9]입니다 대신

0
e.intime=timeStr; 

timeStr _strtime_s을 사용하는 것이 좋습니다. 할당이나 매개 변수로 사용되는 함수 호출 중에 첫 번째 요소를 가리키는 포인터로 쇠퇴합니다.

e.intimechar입니다. charchar*은 형식과 호환되지 않으므로 컴파일러에서 불만을 제기하고 있습니다. 대신에 -

struct tme 
{ 
    char intime[10]; // +1 for the termination character to play safe 
}e; 

이제 strcpy를 사용하여 시간을 멤버 변수에 복사 할 수 있습니다. 이 C++의 경우

strcpy(e.intime, timeStr); 

, 표준 : : 문자열 대신 원시 배열을 사용합니다.

+0

버퍼 크기가 9이면 충분합니다. 여섯 자리, 두 개의 콜론 및 널 문자. –

+0

추가 종료 문자가 필요한 경우에는 안전하지 않습니다 (timeStr에 종료 null이 없으므로 strcpy가 10자를 초과 할 수 있습니다). 그러나 실제로 strTime은 null로 끝나는 것이 보장되므로 9자를 충분합니다. – TonyK

+0

@TonyK - strcpy는 대상에 공간이 남아 있기 때문에 덮어 쓰지 않습니다. 소스가'\ 0'에 도달 할 때까지 소스를 목적지에 복사합니다. – Mahesh

0

정련의 단계 :

1 단계 : 코드를 수정하십시오.

struct tme { 
    char * intime; // You had a type mismatch 
} e; 

int main() { // Don't use void main() 
    char timeStr [9]; 
_strtime(timeStr); 
    e.intime=timeStr; 
    printf("The current time is %s \n", timeStr); 
} 

문제가 여기에있다 : 당신의 struct tme 그것을 위해 모든 것을 할, 그래서 제대로 할 외부 세계에 의존한다. 메인에서 timeStr을 다시 사용하려면 어떻게해야합니까? main 이외의 함수에서이 구조체를 사용하고 e.intime을 범위를 벗어나는 변수로 설정하면 어떻게 될까요?

상세 검색 : struct tme은 시간 버퍼를 소유해야합니다.

struct tme { 
    char intime[9]; // Put the buffer here, not in main. 
} e; 

int main() { 
    _strtime(e.intime); 
    printf("The current time is %s \n", e.intime); 
} 

여기에도 여전히 문제가 있습니다. 그 버퍼는 누구나 수정할 수 있으며, 구조는 단지 수동 콘센트 일뿐입니다.

상세 검색 : 데이터를 숨기고 개체를 활성화합니다.

struct tme { 
    const char * set_time() { _strtime (intime); return intime; } 
    const char * get_time() const { return intime; } 
private: 
    char intime[9]; 
}; 

int main() { 
    printf("The current time is %s \n", e.set_time()); 
} 
관련 문제