[解決済み] Cプログラムのstrcatが動作しない
2022-02-14 07:32:03
質問
#include<string.h>
#include<stdio.h>
void main()
{
char *str1="hello";
char *str2="world";
strcat(str2,str1);
printf("%s",str2);
}
このプログラムを実行すると、ランタイム・プログラム・ターミネーションが発生するんだけど。
よろしくお願いします。
これを使うと
char str1[]="hello";
char str2[]="world";
であれば、うまくいっていることになります。
しかし、なぜ
char *str1="hello";
char *str2="world";
このコードは動作しないのでしょうか?
どうすればいいですか?
あなたは悪い本から学んでいるのです。main関数は次のように宣言する必要があります。
int main (void);
voidと宣言すると、アプリケーションが終了したときに未定義の動作が発生します。まあ、まだ終了していませんが、いずれは終了するでしょう。
C言語の本を買ってきてください。そうすれば、次のことがわかるでしょう。
char *srt1="hello";
を書いたようにコンパイルされます。
static const char secret_array [6] = { 'h', 'e', 'l', 'l', 'o', 0 };
char* srt1 = (char*) &secret_array [0];
の間に
char srt1[]="hello";
を書いたようにコンパイルされます。
char srt1 [6] = { 'h', 'e', 'l', 'l', 'o', 0 };
strcatの呼び出し先は、結果を格納するのに十分なメモリを持っていないので、どちらの呼び出しも深刻なバグです。最初の呼び出しも、定数メモリを変更しようとするので、バグである。最初のケースでは、このバグはクラッシュにつながり、それは良いことであり、幸運なことである。2番目のケースでは、バグがすぐに検出されません。これは幸運なことです。このようなコードを顧客に出荷するプログラムに使用すると、運が良ければクラッシュし、そうでなければ顧客に多額の損失を与え、訴えられるような間違った結果につながることは間違いないでしょう。
関連
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】「無効なイニシャライザー」と表示されるのですが、何が間違っているのでしょうか?
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】C言語のchar arrayとchar pointerの違いは何ですか?