2012-05-15 5 views
0

다음 코드 세그먼트를 사용하여 시스템 시간을 가져 왔습니다. 그러나 세그멘테이션 오류가 발생합니다. 도와주세요.시간 함수가 C에서 작동하지 않습니다.

printf("Time : %s\n", System("time")); 
return 0; 
+0

당신의 매뉴얼은'System()'(* 대문자 'S'??? 이것은 표준 C *가 아닙니다) 함수의 반환 유형입니까? – pmg

+2

라이브러리 호출'system()'을 사용하는 경우 프로그램의 출력이 아닌 실행 된 호출의 반환 값을 포함하는 정수를 반환합니다. 현재 시스템 시간을 원한다면'time()','localtime()'및'strftime()'을 살펴보십시오. – dwalter

+1

컴파일러가 printf 형식 지정자에 대한 경고를 제공 했습니까? 예를 들어, 경고 : '% s'형식은 'char *'유형을 필요로하지만 인수 2는 'int' "'유형을가집니다. 그렇다면 컴파일러 경고를 무시하지 마십시오. 그들은 당신에게 뭔가를 말하려고합니다. 그렇지 않다면, 경고를 켜거나 더 나은 컴파일러를 얻고 싶을 수도 있습니다 :-) –

답변

3

대신 다음 코드를 사용하여

time_t t; 
time(&t); 
printf("%s", ctime(&t)); 

이가 문제를 해결하는 것입니다.

+0

고마워, 그게 내 문제를 해결해 줬어. – binish

2

난 당신이 system()보다는 System() 의미 가정합니다.

system()은 명령이 터미널에 인쇄 한 내용을 포함하는 문자열을 반환합니다. 그것은 그렇게하지 않습니다. 사실 system()은 자식 프로세스의 종료 코드를 반환합니다.

현재 시간을 얻을 수있는 가장 쉬운 방법은 time() 기능을 사용하는 것입니다 :

NAME 
     time - get time in seconds 

SYNOPSIS 
     #include <time.h> 

     time_t time(time_t *t); 

DESCRIPTION 
     time() returns the time since the Epoch (00:00:00 UTC, January 1, 
     1970), measured in seconds. 

     If t is non-NULL, the return value is also stored in the memory pointed 
     to by t. 
1

system() function 정수를 반환 %s 당신이 문자열을 인쇄 할 것을 나타냅니다있다. 시스템 기능은 time 프로그램의 결과가 아니라 종료 값을 리턴합니다.

2

system() 함수는 문자열이 아닌 종료 상태 (int)를 반환합니다. system("time")을 호출하면 시간을 표준 출력으로 인쇄합니다. 만약 당신이 원하는 경우에, 당신이 세그먼트 폴트를 얻을 수

system("time"); 

를 사용 printf와의 %s에 대한 포인터로 NULL 포인터입니다 해석 INT 0 때문이다. Dereferencing NULL 포인터는 정의되지 않은 동작이며 세그먼트 화 오류는 정의되지 않은 동작에 대한 하나의 가능성입니다.

관련 문제