[解決済み] C言語のBus: error 10の意味を教えてください。
2022-02-12 06:16:47
質問内容
以下は私のコードです。
#import <stdio.h>
#import <string.h>
int main(int argc, const char *argv[])
{
char *str = "First string";
char *str2 = "Second string";
strcpy(str, str2);
return 0;
}
警告やエラーもなく正常にコンパイルされましたが、コードを実行すると以下のようなエラーが表示されます。
Bus error: 10
何を見逃したのか?
解決方法は?
ひとつは、文字列リテラルを変更できないことです。これは未定義の動作です。
それを解決するために
str
をローカル配列として使用します。
char str[] = "First string";
さて、2つ目の問題が発生します。
str
を保持するには十分な大きさではありません。
str2
. だから、長さを増やす必要があります。さもないと、オーバーランしてしまいます
str
- これも未定義の動作です。
この2つ目の問題を回避するためには、以下のように
str
と同じ長さの
str2
. または動的に割り当てる。
char *str2 = "Second string";
char *str = malloc(strlen(str2) + 1); // Allocate memory
// Maybe check for NULL.
strcpy(str, str2);
// Always remember to free it.
free(str);
この他にも、(C99の)VLAやスタックアロケーションを使ったよりエレガントな方法がありますが、その使い方には少々疑問が残るので、ここでは触れません。
コメントで@SangeethSaravanarajが指摘しているように、みんなは
#import
. これは、次のようになります。
#include
:
#include <stdio.h>
#include <string.h>
関連
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み] テスト
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み】C/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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】警告:式の結果が未使用の場合