2017-03-22 9 views
1

コード:ショート1:文字からのconst char型への無効な変換は*

void setup(){ 
Serial.begin(19200); 
static char value [20] = "20:17:12"; 
setSimTime(value); 
} 

void setSimTime(char* incoming){ 
    char dateTime[20]; 
    strcat(dateTime, "20"); 
    strcat(dateTime, incoming[0-1]); 
    Serial.println(dateTime); 
} 

これを行うには正しい方法は何ですか? 助けを借りてありがとう

+3

「着信[0-1]」これはどういうことだと思いますか?配列内のインデックス '-1'にアクセスしようとしていますが、意味がありません。 – BoBTFish

+0

@BoBTFish 0から1へのアクセスを試みました – sdd

+0

タイトルにエラーが発生した行はどれですか? – Rama

答えて

1

strcat(dateTime, incoming[0-1]);を使用しています。incoming[0-1]incoming[-1]と同じです。定義されていない動作が発生します。実際にはincoming[-1]は配列インデックス-1にある1文字ですが、これがエラーの原因です。コンパイラは1文字(char)をcharポインタ(char*)に変換できません。

代わりに使用します。

strncat(dateTime, incoming, 2); 

strncatnに注意してください。これは、incomingからdateTimeまでの2文字を連結し、終端ヌル文字を入れます。

nが前に開始インデックス、すなわち、ゼロであり、 lがコピーする最大長である
strncat(dateTime, incoming + n, l); 

:あなたはこれを拡張することができ

拡張

行うインデックス3および4で文字を連結するには、どのような場合だ:

strncat(dateTime, incoming + 3, 2); 
+0

ありがとう、3から4にアクセスするにはどうすればいいですか? – sdd

+0

回答を更新しました – Jonas

+0

ありがとうございます。私はdateTimeを使用していますので、RTCクロックを設定してください: clock.setDateTime(dateTime);しかし、これはエラーを与えます: 'char *'から 'uint32_t'への無効な変換。何故かあなたはなぜ知っている? – sdd

1

正確なエラーメッセージがincoming[0-1]がタイプcharであるという事実から来ているが、strcat第2のパラメータとしてconst char*があり、これはcharへのポインタです。

非const値は常にconst値に変換できるため、追加のconstは問題ありません。

incoming[0-1]の無効に関する他の回答/コメントを参照してください。

関連する問題