2013-05-01 68 views
0

我試圖從星期幾得到個別字符。這是我的。得到一個單一的常量字符*在c

const char *daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 
const char *tc = daysOfTheWeek[dayOfWeek]; 
text_layer_set_text(&dow_one, &tc[0]); 
text_layer_set_text(&dow_two, &tc[1]); 
text_layer_set_text(&dow_three, &tc[2]); 

什麼是顯示出來爲
& dow_one = ...
& dow_two = ED
& dow_three = d

我要的是
& dow_one = W
& dow_two = e
& dow_t hree = d

如果我刪除了&,只是使用tc [0],我得到一個編譯錯誤。

83:9:錯誤:傳遞參數2的'text_layer_set_text'使得整形指針沒有劇組[ pebble_os.h:677:6:note:expected'const char *'但參數的類型爲'char'

這是一個嵌入式系統,它無法訪問sprintf。純C僅

回答

1

隨着您指向「在字符串中間」的地方你的代碼(例如,&tc[1]是一個以指針「這個字符串稱爲tc,但位置開始[1]」),和從那裏你會得到「一切到最後(終止符'\0')」。如果你想要一個字符,你應該個體線複製到長度爲1 + 1空結束的字符串:

static char dow1[2]; 
static char dow2[2]; 
static char dow3[2]; 
char tc[]="Wed"; 

dow1[0] = tc[0]; dow1[1]='\0'; 
dow2[0] = tc[1]; dow2[1]='\0'; 
dow3[0] = tc[1]; dow3[1]='\0'; 

這是假設tc包含您感興趣的人物現在你可以做

text_layer_set_text(&dow_one, dow1); 
text_layer_set_text(&dow_two, dow2); 
text_layer_set_text(&dow_three, dow3); 

利用dow1是char數組的名稱以及指向第一個元素的指針這一事實。根據你自己的評論,我將它們聲明爲static - 這意味着該變量在聲明返回函數後繼續存在,並且我認爲這很重要,因爲稍後可能會引用該值以用於顯示目的。

當然,如果你真的只需要一個字,那簡直是

char c1, c2, c3; 
c1 = tc[0]; 
c2 = tc[1]; 
c3 = tc[2]; 

這取決於你想如何使用它一點 - 不是從你的問題你text_layer_set_text()功能做什麼明確的。我搜索了一下,我認爲上面應該對你有用 - 但我沒有使用Pebble,所以我不能100%確定。

+0

它符合但沒有顯示任何數據。我不確定它是否與text_layer_set_text預期的相關。 void text_layer_set_text(TextLayer * text_layer,const char * text); – 2013-05-02 03:27:52

+0

我假設你確定'tc'包含了感興趣的字符串......我沒有明確說明,會編輯答案。 – Floris 2013-05-02 03:32:14

+0

我有這個,我發現我遇到的問題。它需要是靜態的。謝謝您的幫助。 – 2013-05-02 15:28:24

相關問題