フォーラム(掲示板)ルールに従って、コードタグを使用してください。
フォーラム掲示板ルール さんが書きました:
d. 義務行為
"C言語何でも質問掲示板"でのみ適用される事項
・複数の回答者がいた場合、都合の良い、または自分の気が向いた回答者にだけ返信を書かず、回答をくれた人 全員に対して出来る限りの返信を書きましょう。
・回答者のコメントの中に複数質問があった場合、出来る限りその全てに答えるようにしましょう。
name[10] = *name_student; がなぜダメなのか理解していますか?
char name[10]; と宣言すると、char 10個分の領域がメモリ中に確保され、
name[0]~name[9] のように使用します。
name[10] は確保した領域の範囲外なので、そこに何かを代入すると
他の変数や、関数の戻り番地などの重要な情報が壊れてしまいます。
「name[10] が配列全体を表す」と勘違いしていませんか?
name_student は「const char へのポインタ」で、
文字列 "lebron" の先頭の 1文字 'l' を指しています。
したがって、*name_student の値は 'l' です。
*name_student が、文字列"lebron"全体になると勘違いしていませんか?
やりたいことは、name[0]~name[6] の 7個所に
'l', 'e', 'b', 'r', 'o', 'n', '\0' の 7文字を入れたいということですね。
コード:
int i;
for (i = 0; i < 9 && name_student[i] != '\0'; i++)
name[i] = name_student[i];
name[i] = '\0';
と書くか、
コード:
if (strlen(name_student) < 10) strcpy(name, name_student);
と書くべきでしょう。
char name[10]; の代わりに string name; と宣言すれば、
name = name_string; だけで済みます。
#include <string> が必要ですが。
それから、ob.get_name(); を呼び出すだけでは、正しい結果が
返ってきたかどうかわかりません。
cout << ob.get_name() << endl; などのコードで確認しましょう。
返信をお待ちしております。