0

自从我上次使用 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。我在这里缺少什么?如何访问 a 中的第一个字符char[]

作为一个临时解决方案,我所做的是声明一个 2-charactercharstrncpy &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中的十位值?

4

1 回答 1

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,...)

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

于 2014-11-05T12:59:18.357 回答