1. ホーム
  2. c

[解決済み] 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>