【发布时间】:2014-11-05 12:50:47
【问题描述】:
自从我上次使用 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[] 中的第一个字符?
作为临时解决方案,我所做的是将两个字符的 char 和 strncpy &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 中的十位值?
【问题讨论】:
-
如果我删除&,即
text_layer_set_text(s_m_ten_layer, d_minute[0]);,编译器返回passing argument 2 of 'text_layer_set_text' makes pointer from integer without a cast错误
标签: c char pebble-sdk cloudpebble