2014-11-05 2 views
0

C를 사용하여 마지막으로 프로그래밍 한 이후로 꽤 오랜 시간이 걸렸지 만 포인터와 문자열과 혼동하는 것 같습니다. 조약돌 시계 얼굴을 쓰고 있어요. 나는 분 수의 자리를 1 자리수와 10 자리수로 분리하여 각각의 컨테이너에 넣어야합니다.페블 C, 지정된 위치에서 문자 가져 오기

그래서 분이 25 인 경우 2와 5를 분리하여 두 개의 개별 변수 char에 넣어야합니다.

내가 쓴 코드는 제대로

static void update_time() { 
    time_t temp = time(NULL); 
    struct tm *tick_time = localtime(&temp); 

    static char d_minute[] = "00";  

    if (clock_is_24h_style() == true) { 
    strftime(d_minute, sizeof("00"), "%M", tick_time);  
    } else {  
    strftime(d_minute, sizeof("00"), "%M", tick_time);  
    }  

    text_layer_set_text(s_m_one_layer, &d_minute[1]); // ones' place for 2[5] 
    text_layer_set_text(s_m_ten_layer, &d_minute[0]); // tens' place for [2]5 

} 

&d_minute[1] 수익률 5입니다. 그러나 &d_minute[0]은 전체 문자열 25를 반환합니다. 여기서 무엇을 놓치고 있습니까? char[]의 첫 번째 문자에 어떻게 액세스 할 수 있습니까? 임시 해결책으로

는, 내가 한 일은 단지 첫 번째 문자를 복사하도록 강요, 그것으로 2 문자 charstrncpy &d_minute[0]를 선언했다.

static char min_ten[] = " "; 
..... 
strncpy(min_ten, &d_minute[0], 1); 
.... 
text_layer_set_text(s_m_ten_layer, min_ten); 

코드 냄새라고 생각합니다. C에서 수십 '값을 얻으려면 어떻게해야합니까?

+0

& 'text_layer_set_text (s_m_ten_layer, d_minute [0]);'을 제거하면 컴파일러에서'text_layer_set_text '의 전달 인수 2를 반환합니다. 캐스트가없는 정수에서 포인터를 만듭니다'오류 – Devmonster

답변

3

내부적으로 d_minute 문자열은 다음과 같이 저장됩니다

d_minute = {'2', '5', '\0'} 

마지막 문자 \0text_layer_set_text 문자열이 종료 된 것을 알고 이런 식으로 문자열을 종료합니다. 귀하의 해결 방법은 그래서 당신이

text_layer_set_text(&d_minute[0],...) 

전화

는 다음이, 당신은 문자열 당신이 끝을 인쇄 할 기능을 알려줄 필요가이

text_layer_set_text(d_minute,...) 

처럼 호출하는 것과 동일 실제로 그것을 할 올바른 방법.

+0

감사합니다! 'text_layer_set_text'는 SDK 함수이므로 땜질을 할 수 없습니다. – Devmonster

+0

@Devmonster 예 그리고 당신이 한 것처럼 어쨌든 괜찮아 보입니다. – thumbmunkeys

관련 문제