2017-09-30 16 views
0

私はCの構文に関して非常に簡単な質問を得ました。文字列操作アドバイスのC構文?

いくつかの静的な文字列を動的な文字列とマージしようとしています。例えば

私は次のプロトタイプを持つC関数を得た:

uint8_t AT_feedback_checker(const char my_str[], const char ATcmd[], 
          uint32_t time_out_ms, uint8_t mode); 

私は動的に文字列のファイル名の一部を変更したい

if (AT_feedback_checker(PSTR("OK"), PSTR("AT+HTTPPARA=\"URL\",\"https://djblob.blob.net/mycontainer/myFirstDevicea.txt\" "),2000,0) == AT_REPLY_STATUS_FOUND_AT_REPLY) 

としての私の関数を呼び出しています。

たとえば、a.txtまたはb.txtmyFirstDevicea.txtの代わりに)です。ファイル名は変更できます。

文字列の開始部分が特定のテキストで残りの部分がファイル名などの任意のものになるように、関数や構文を設定するにはどうすればよいですか?

誰かが私に例を示すことはできますか?

+0

私はあなたが混乱していると思います。 const char []をとる関数に可変文字列を渡すことができます。変数char []をとる文字列に定数文字列を渡すことはできません。 –

答えて

1

古典的なCのイディオムはsnprintfのような一時的な文字列やツールを使用することです:

char cmd[128]; // choose a "large enough" size 
snprintf(cmd, sizeof cmd, 
    PSTR("AT+HTTPPARA=\"URL\",\"https://djblob.blob.net/mycontainer/%s\" "), 
    file_name); 
if (AT_feedback_checker(PSTR("OK"), cmd, 2000, 0) 
    == AT_REPLY_STATUS_FOUND_AT_REPLY) 
    ... 

snprintfは、ファイル名が大きすぎる場合には、一時的なバッファオーバーランを避けることができます。プロダクションコードでは、戻り値snprintfもチェックし、その場合のエラーを報告します。