Pebble C,在指定位置获得Char

时间:2014-11-05 12:50:47

标签: c char pebble-sdk cloudpebble

自从我上次使用C编程以来已经有一段时间了,但似乎我对指针和字符串感到困惑。我正在写一个Pebble表盘,我需要将分钟的数字分成几位数和十位数,并将它们放入各自的容器中。

因此,如果分钟数是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中的十进制值?

1 个答案:

答案 0 :(得分: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,...)

您需要告诉函数您要打印的字符串的结束位置,因此您的解决方法实际上是正确的方法。