0

最後に C を使用してプログラミングしてからしばらく経ちましたが、ポインタと文字列を混同しているようです。Pebble ウォッチフェイスを書いています。分の桁を 1 の桁と 10 の桁に分けて、それぞれのコンテナに入れる必要があります。

charしたがって、分が 25 の場合、2 と 5 を分離して、2 つの別々の変数に入れる必要があります。

私が書いたコードは

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で十の値を取得するにはどうすればよいですか?

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 に答える