2011-11-28 3 views
1

I는 클록에 대한 코드를 작성하고 I 배열 시간 []함수에서 배열을 참조하는

char time[]="23:59:45   "; 
char display_time(char *t[], char *, char *, char *); 

void main(void)    
{ 
      display_time(&time, &hr, &min, &sec); 
      GLCD_GoTo(5,3); 
      GLCD_WriteString(time, Font_System7x8); 
} 

에 저장되어있는 시간을 표시하는 기능을 생성하고있어이 제 기능

char display_time(char *t[], char *h, char *m, char *s) 
{ 

       *t[0]=*h/10+48; 
       *t[1]=*h%10+48; 
       *t[3]=*m/10+48; 
       *t[4]=*m%10+48; 
       *t[6]=*s/10+48; 
       *t[7]=*s%10+48; 


} 

모든 것이 잘 컴파일되지만 시간이 업데이트되지 않고 초기화 된 값만 표시됩니다.

+7

수업 중에'void main (void)'을 배웠다면 강사를 전환 할 차례입니다. –

+4

컴파일러 경고 수준을 최대로 높입니다. ** 경고 **를 염두에 두십시오. – pmg

+0

실제로 시간을 업데이트 할 예정인 코드를 표시하지 마십시오. 나는 당신이 실제로 time []에서 값을 수정한다고 가정하고있다. 이것을 수행하는 코드를 게시해야한다. 그래서 우리는 실제로 무엇이 잘못되었는지를 볼 수있다. – Jarek

답변

1
  • 경고와 함께 컴파일하십시오 (gcc가 -Wall -Wextra)
  • DISPLAY_TIME가 INT 돌아가 하나 (int, char*[]) 또는 () 있지만 (void)
  • 당신이에 의해 lisibility을 향상시킬 수 있습니다해야 무효
  • 주를 반환해야 포인터 대신 값 전달 (포인터 대신)
  • 012 대신 플러스
  • 시간을 초기화하지 않은 경우 48 대신 '0'을 사용하십시오. 분 및 초.
  • 시간은 당신이하지 "표시 시간", 함수에 대한 더 나은 이름을 적어 않는 NULL 포인터
  • display_time 테스트해야하며이 완료
  • 등 0과 24의 경우 테스트해야합니다 -)

.

void display_time(char t[], int h, int m, int s) { 
    t[0] = h/10 + '0'; 
    t[1] = h % 10 + '0'; 
    t[3] = m/10 + '0'; 
    t[4] = m % 10 + '0'; 
    t[6] = s/10 + '0'; 
    t[7] = s % 10 + '0'; 
} 

int main(int, char*[]) { 
    char time[] = "23:59:45"; 
    int hr = 3, min = 9, sec = 42; 
    display_time(time, hr, min, sec); 
    GLCD_GoTo(5,3); 
    GLCD_WriteString(time, Font_System7x8); 
    return 0; 
} 
-1

유형이 잘못되었습니다. 포인터의 배열을 전달하지 않으므로 char *t[]을 보내면 안됩니다. 또한 &timetime과 동일하지만 "시간 주소"는 없습니다. 함수에 char *를 전달하려고합니다.

+0

'& time'은'time'과 같은 의미가 무엇입니까? –

+0

그런 식으로 배열 선언이 작동합니다. 그것을 시도하고, printf ("% x % x", & time, time); 그리고 두 개의 동일한 주소를 인쇄 할 것입니다. – TJD

+0

그들이 이해하는 것부터 ** 서로 다른 타입입니다. 'time'은'char [9]'이고'& time'는'char *'입니다. 'printf'에 대한 호출에서 이것은 variadic 함수이고 ('% x'는 부호없는 16 진수 정수를 필요로하기 때문에) 거기에 int 로의 암시 적 형변환을합니다. –

관련 문제