自从我上次使用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个字符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中的十进制值?
答案 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,...)
您需要告诉函数您要打印的字符串的结束位置,因此您的解决方法实际上是正确的方法。