以下のコードでセグメンテーション違反が発生するのはなぜだろうと思っています。
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;
}
以下のコードでセグメンテーション違反が発生するのはなぜだろうと思っています。
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
、初期化されておらず、ガベージが含まれており、セグメンテーション エラーが発生している場合は、マップされていないメモリを指している可能性があります。を呼び出す前に、目的の文字列 (末尾str_new
のバイトを含む) を保持するのに十分な大きさの有効なメモリ ブロックを指定する必要があります。\0
strcpy()