以下のコードでセグメンテーション違反が発生するのはなぜですか?.
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;
}
初期化していません*str_new
なので、単にコピーしていますstr_old
をランダムなアドレスに。次のいずれかを行う必要があります。
char str_new[100];
または
char * str = (char *) malloc(100);
あなたはしなければならない #include <stdlib.h>
malloc関数を使用するときに、まだ使用していない場合。
str_new
は初期化されていないポインタなので、(準)ランダムアドレスに書き込もうとしています。
_str_new
_は有効なメモリを指さないため-初期化されておらず、ガベージが含まれており、セグメンテーションエラーが発生した場合はマップされていないメモリを指す可能性があります。 strcpy()
を呼び出す前に、_str_new
_が、対象の文字列を保持するのに十分な大きさの有効なメモリブロックを指すようにする必要があります(末尾に_\0
_バイトを含む)。