[解決済み] C言語のフォーマット文字列を作成する(印刷はしない)
質問
文字列を受け取る関数があります。
void log_out(char *);
のように、呼び出す際に、その場で整形された文字列を作成する必要がありますね。
int i = 1;
log_out("some text %d", i);
ANSI Cでこれを行うにはどうしたらよいでしょうか?
のみです。
sprintf()
はintを返すので、少なくとも3つのコマンドを書かなければならないことになります。
char *s;
sprintf(s, "%d\t%d", ix, iy);
log_out(s);
これを短くする方法はありますか?
どのように解決するのですか?
使用方法 sprintf . (これは安全ではありませんが、OPはANSI Cの答えを要求しています。安全なバージョンについてはコメントを参照してください)。
int sprintf ( char * str, const char * format, ... );
フォーマットされたデータを文字列に書き込む printfでformatが使われた場合に出力されるのと同じテキストで文字列を構成する。 ただし、printfでformatが使用された場合は印刷されるのではなく C言語の文字列としてstrが指すバッファに格納されます。 に格納されます。
バッファのサイズは、結果の文字列全体を含むのに十分な大きさであるべきです。 を含むのに十分な大きさでなければなりません(より安全なバージョンについては、snprintfを参照してください)。
の後に、終端ヌル文字が自動的に付加されます。 の後に自動的に付加されます。
formatパラメータの後、この関数ではフォーマットに必要な数だけの の追加引数が必要です。
パラメータです。
str
結果のC文字列が格納されるバッファへのポインタ。このバッファは は、結果の文字列を格納するのに十分な大きさでなければなりません。
format
<ブロッククオート
printfのformatと同じ仕様のフォーマット文字列を含むC文字列(詳細はprintfを参照)。 の仕様に従った書式文字列を含むC言語文字列です(詳細はprintfを参照)。
... (additional arguments)
<ブロッククオート
フォーマット文字列によっては、この関数は一連の を置き換えるために使用される値を含む追加の引数の列を期待することができます。 フォーマット文字列のフォーマット指定子を置き換えるために使用される値(または、ストレージの へのポインタ)を含む。これらの引数は,少なくとも の数は,少なくとも書式指定子で指定された値の数と同じでなければならない。追加の の引数は関数では無視されます。
例を示します。
// Allocates storage
char *hello_world = (char*)malloc(13 * sizeof(char));
// Prints "Hello world!" on hello_world
sprintf(hello_world, "%s %s!", "Hello", "world");
関連
-
[解決済み] CコードでEOFを表現する?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
-
[解決済み] Bashで文字列を比較する方法
-
[解決済み] 文字列の一覧から空の文字列を削除する
-
[解決済み] 文字列を繰り返す簡単な方法
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
C++の配列コピー
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] C関数から文字列を返す
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する
-
[解決済み] C言語で "unsigned long "をprintfする方法は?