みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

クラスの中のchar型変数の初期化

C++でchar型の変数をメンバーに含むクラスを作りました。
先ほどこちらで助けていただいてエラーからは回避できたのですが
雇用者の名前だけが文字化けして表示されます。
どうも初期化がうまくいっていないようです。
empNameを見ると0x0012ff34 ""などという訳の分からない値になっています。
でもpublicのempName()の括弧の中に何か入れるとすぐに怒られますし…。
すみません、助けてください。

class TimeOff
{
private:
int idNum;
enum { size = 20};
char empName[size]; //雇用者の名前
float maxSickDays;
float sickTaken;
float maxVacation;
float vacTaken;
float maxUnpaid;
float unpaidTaken;
public:
TimeOff() : idNum(0),
empName(),
maxSickDays(0.0),
sickTaken(0.0),
maxVacation(0.0),
vacTaken(0.0),
maxUnpaid(0.0),
unpaidTaken(0.0)
{ }
TimeOff(int iN,
char eN[],
float mS,
float sT,
float mV,
float vT,
float mU,
float uT)
: idNum(iN),
empName(),
maxSickDays(mS),
sickTaken(sT),
maxVacation(mV),
vacTaken(vT),
maxUnpaid(mU),
unpaidTaken(uT)
{ }
void showndays() const
{ cout << idNum << "\t"
<< empName << "\t" //ここだけが文字化け
<< maxSickDays << "\t" //他の変数はそのまま表示される
<< sickTaken << "\t"
<< maxVacation << "\t"
<< vacTaken << "\t"
<< maxUnpaid << "\t"
<< unpaidTaken << endl; }
};
int main()
{
TimeOff emp1(1000, "Anna Balyo", 200, 30, 20, 10, 40, 10);
emp1.showndays();
return 0;
}

投稿日時 - 2003-03-17 11:15:52

QNo.500162

すぐに回答ほしいです

質問者が選んだベストアンサー

#include <iostream>
#include <cstring>

using namespace std;

class X {
char name[10];
public:
X(const char* n) {
strcpy(name,n); // 配列は単なる代入ではコピーできない
}
void print() const {
cout << "X.name = " << name << endl;
}
};

int main() {
X x("小泉");
x.print();
return 0;
}

投稿日時 - 2003-03-17 11:27:49

お礼

出来ましたーっ!!!
データを得るときはconst char* nで得て、それをstrcpyでメンバーにコピーする必要があったのですね。
数値を扱うのは簡単なのに文字列ではいつも苦労します。もっともっと勉強します。
名前の"小泉"には少し笑ってしまいました。(笑)
ありがとうございました!!

投稿日時 - 2003-03-17 11:52:51

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問