とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

人力検索はてな - プログラミング初心者です ポインタを使った文字列の初期化でつまづいています. char str = "hoge"; char* str2 = "piyo"; のように初期化した後では printf("%c\n",str..
初心者とは思えない良い質問をする方です。一部の回答者がちょっとアレですが,まず質問者の質問への指摘から。

ポインタを使った文字列の初期化
char str[] = "hoge";
char* str2 = "piyo";

上の行は「char型の配列の初期化」,下の行は「char*型の初期化」となります。「文字列初期化」ではなくて,「文字列初期化」の方が正しいかな。
続いて回答者へ目を向けてみる

char* str2 = "piyo";
str2に文字というか数値を格納する場合
メモリを割り当てたり strのポインタにすればよいでしょう

str2 はポインタ型ですからポインタしか代入してはいけません。さらに言えば,charへのポインタですね。まぁ,大抵の実装では数値でしょうけど,配列と配列の要素の区別が付いていないので,(質問者を)混乱させる回答です。

前者は動的領域にデータが確保されるので、

何だ?「動的領域」って?プログラム言語Cにそんな用語はないはずです。
…後半部分はまあまあ正しいですね。「静的領域」って謎用語がありますが,規格で文字列リテラルを書き換えるのは未定義動作だって事をたぶん言いたいのでしょう。
具体的な処理系を意識した解答であれば Kumappus さん,規格中心の解答であれば dev_zer0 さんがよさげな解答ですね。
str2 は const char* で宣言して,

const char*str2 = "piyo";

ってやれば一番いいですね。