[解決済み】C言語でconst/literal文字列を連結する方法は?
2022-04-14 13:58:44
質問
C言語で作業しているのですが、いくつかのものを連結する必要があります。
今はこんな感じです。
message = strcat("TEXT ", var);
message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar));
さて、C言語の経験がある方ならお気づきだと思いますが、これを実行しようとするとsegmentation faultが発生します。では、どのように回避すればいいのでしょうか?
解決方法は?
C言語では、文字列は単なる
char
配列です。そのため、他の文字列と直接連結することはできません。
を使用することができます。
strcat
関数が指す文字列を追加します。
src
で指される文字列の末尾に
dest
:
char *strcat(char *dest, const char *src);
以下は cplusplus.comの例 :
char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");
第1パラメータには、デスティネーションバッファそのものを指定する必要があります。 デスティネーションバッファはchar配列バッファである必要があります。 例.
char buffer[1024];
確認する
は、最初のパラメータにコピーするものを格納するのに十分なスペースがあること。 もし利用可能であれば、以下のような関数を使用するのが安全です。
strcpy_s
と
strcat_s
のように、デスティネーションバッファのサイズを明示的に指定する必要があります。
備考 : 文字列リテラルは定数であるため、バッファとして使用することはできません。したがって、常にバッファ用の文字配列を確保する必要があります。
の戻り値は
strcat
これは単に、最初の引数として渡されたのと同じポインタを返すだけなので、無視してもかまいません。これは便宜上存在するもので、呼び出しを一行のコードに連結することができます。
strcat(strcat(str, foo), bar);
つまり、あなたの問題は次のように解決できるのです。
char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);
関連
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み] struct has no member named
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。