私は、インデックス値を文字列に変換するために関数を作成しています。これは、インデックスによって表される "フィールド"の詳細な記述です。gccは文字列リテラルフォーマット文字列を使用しないことについて警告しません
私は索引付けされたすべての冗長な記述を持つ素敵な配列を持っています。私は、問題は、私はそれをフォーマットするとき、文字列の中にいくつかの他の文字列を挿入する必要があるいくつかのケースのために来て、この
#define BUFFER_SIZE 40
void format_verbose(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
snprintf(mY_buffer, BUFFER_SIZE, "%s", MY_ARRAY[my_index].description);
}
のようなコードを使用してバッファにそれをダンプする
。だから私が欲しいものは、このようなものです(この場合の説明には%s
が含まれています)。
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, MY_ARRAY[my_index].description,
some_string);
}
私たちのmakeファイルは、(危険な)snprintf()警告を使用するように設定されており、警告はエラーとして扱われます。だから、それはコンパイルされません。私はちょっと危険ですが、文字列を制御して、それが呼び出されるすべての値で動作することを確認するために、この行の警告をオフにしたいと思います。
代わりに、私はこれにいくつかの他の方法を行いたいと思っていますが、それは特に私ドンのもののために、私の説明配列は醜いになりますので、私は本当に
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, "%s%s%s"
MY_ARRAY[my_index].description1, some_string,
MY_ARRAY[my_index].description2);
}
このソリューションを使用することに熱心ではありませんよ余分な値を追加する必要はありません。
文字列バッファーの長さをチェックする愚かな試みを取り除くために編集しました。もちろん、バッファがゼロ以外のすべての初期化されていない限り、動作しません。 – Peter