char* str;
上記 str 変数は初期化されていないので不定値となります。
で、scanf が不定のアドレスを参照してしまうためエラーになります。
加えて、ポインタ変数は参照先(アドレス)のみを保持するので、
読み込んだ文字列を格納するバッファ(メモリ)を確保する必要があります。
(※うまく動いているコードは str をサイズ100の
char 型の配列として確保しているので正常に動いているわけです)
ですので、動作させるにはメモリを確保して str 変数に代入する必要があります。
↓確保した配列を割り当てる例
int main( void ){
char buf[100]; // バッファの確保
char* str = buf; // バッファの割り当て
/*省略*/
↓メモリを確保する例
int main( void ){
char* str = (char*) malloc( 100 * sizeof(char) ); // メモリの確保
/* 省略 */
free( str ); // 確保したメモリの解放
return 0;
}
メモリの確保とポインタ参照はC言語の肝なので頑張って理解してください。
Like!