0

次のコードでセグメンテーション違反が発生しています

static char * result;

char s[31];

int i;

random_string(s, 10);



 // for (i = 0; i < 15; i++){
 //     result[i] = s[i];
 // }

strcpy(result, s);

printf("el result es %s\n", result);

関数 random_string は次のとおりです。

void random_string(char * string, int length)
 {
  /* Seed number for rand() */

 int i;

for (i = 0; i < length -1; ++i){

    string[i] = rand() % 90 + 65;
 }

 string[length] = '\0';
}

strcpy を使用すると、何らかの理由でセグメンテーション違反が発生します。また、バイトごとのコピーも機能しません。何が問題ですか?私はアイデアがありません。

4

6 に答える 6

4

問題は、result初期化されていないことです。未定義の動作が発生します。そのように使用する前に、有効なバッファを指していることを確認する必要があります。例えば:

result = malloc( strlen( s ) + 1 );
于 2013-03-14T12:20:13.890 に答える
2

「結果」ポインタにメモリを割り当てるのを忘れました。次を試してください:

result = malloc( strlen( s ) + 1 );
strcpy(result, s);
于 2013-03-14T12:21:09.910 に答える
2

static char * 結果; メモリが割り当てられていない単なるアドレスです。

これを試してください:[編集済み]

char * result = (char*)malloc(strlen(s) + 1);
于 2013-03-14T12:22:06.320 に答える
0

static char result[10]; のように結果を char 配列として宣言します。

または、メモリを結果ポインタに割り当てます。

于 2013-03-14T12:38:18.027 に答える
0

結果は初期化されていないポインタです。strcpy を使用する前に、結果を文字バッファーに割り当てる必要があります。

于 2013-03-14T12:21:13.197 に答える
0

s 文字列で行っているように、malloc または静的メモリを使用して、結果ポインタに有効なメモリ領域を割り当てる必要があります。そうしないと、ポインターにランダムな場所が割り当てられ、プログラムの境界外にあるため、ポインターにアクセスしてセグメンテーション違反を受け取ります。

于 2013-03-14T12:22:49.343 に答える