2014-11-05 50 views
0

自從我上次使用C編程以來已經有一段時間了,但似乎我對指針和字符串感到困惑。我正在寫一個Pebble錶盤,我需要將分鐘的數字分成幾位數字和十位數字,並將它們放入各自的容器中。卵石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 2014-11-05 12:54:30

回答

3

內部的d_minute字符串存儲這樣的:

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

的最後一個字符\0終止字符串,通過這種方式text_layer_set_text知道該字符串已經結束。

當你調用

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

那麼這就是調用它像這樣

text_layer_set_text(d_minute,...) 

你需要告訴您要打印結束時字符串函數的相等的,所以你的解決方法是實際上是正確的做法。

+0

好的,謝謝! 'text_layer_set_text'是一個SDK函數,所以我無法修補它。 – Devmonster 2014-11-05 13:18:30

+0

@Devmonster是的,你做的方式看起來很好 – thumbmunkeys 2014-11-05 13:34:58