2013-05-01 5 views
0

Я пытаюсь получить отдельные символы со дня недели. Вот что у меня есть.получение единственного const char * in 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 = изд
& dow_three = d

То, что я хочу
& dow_one = W
& dow_two = e
& dow_t hree = d

Если я удалю & и просто использую tc [0], я получаю ошибку компиляции.

83: 9: ошибка: передавая аргумент 2 из '' text_layer_set_text делает указатель из целого числа без приведения [-Werror] /Пользователи/Myke/pebble_dev/галька-СДК-релиз-001/часы/iWatch/включать/pebble_os.h: 677: 6: note: expected 'const char *', но аргумент имеет тип 'char'

Это встроенная система, которая не имеет доступа к sprintf. Только Pure C

ответ

1

С кодом вы указываете на место «в середине строки» (например, &tc[1] является указателем на «эта строка с именем tc, но начиная с местоположения [1]») и оттуда вы получаете «все до конца» (терминатор) ». Если вы хотите только один символ, вы должны скопировать отдельные строки в нулем строку длины 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() функция. Я немного поработал в Google, и я думаю, что выше все должно быть хорошо для вас, но я не использовал Pebble, поэтому я не могу быть на 100% уверенным.

+0

Он соответствует, но не содержит отображаемых данных. Я не уверен, связано ли это с тем, что ожидает текст_layer_set_text. void text_layer_set_text (TextLayer * text_layer, const char * текст); –

+0

Я предполагаю, что вы убедились, что 'tc' содержит интересующую строку ... Я не сделал этого явным, отредактировал ответ. – Floris

+0

У меня было это, я нашел проблему, с которой я столкнулся. Это должно было быть статическим символом. Спасибо за помощь. –

Смежные вопросы