19

以下のコードでセグメンテーション違反が発生するのはなぜだろうと思っています。

int main(void)
{
        char str[100]="My name is Vutukuri";
        char *str_old,*str_new;

        str_old=str;
        strcpy(str_new,str_old);

        puts(str_new);

        return 0;
}
4

3 に答える 3

35

初期化していないため、ランダムなアドレス*str_newにコピーしているだけです。str_old次のいずれかを行う必要があります。

char str_new[100];

また

char * str = (char *) malloc(100);

#include <stdlib.h>malloc 関数を使用するときにまだ行っていない場合は、行う必要があります。

于 2012-04-26T02:57:04.193 に答える
9

str_newは初期化されていないポインターであるため、(準) ランダムなアドレスに書き込もうとしています。

于 2012-04-26T02:55:15.260 に答える
3

は有効なメモリを指していないためstr_new、初期化されておらず、ガベージが含まれており、セグメンテーション エラーが発生している場合は、マップされていないメモリを指している可能性があります。を呼び出す前に、目的の文字列 (末尾str_newのバイトを含む) を保持するのに十分な大きさの有効なメモリ ブロックを指定する必要があります。\0strcpy()

于 2012-04-26T02:56:08.727 に答える