- 締切済み
char*の実体の数値をchar変数に格納する方法
ある関数の戻り値がchar*でその関数の戻り値をchar変数に格納したいです。 char *ret_ch() { char *p="12"; return p; } int main(){ char res; //ここでret_ch()の戻り値の実体数値を代入 res=*ret_ch(); cout<<"RET=="<<ret<<endl; return 0; } char型は1バイトなので一文字しか入りません。 char型に数値として扱い、上記のポインターの 実体数値を格納するにはどのようにしたらいいのでしょうか? よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>もし、戻り値がint型でその値をcharに格納する場合は、どのようにしたらいいのでしょうか? >res_ch=(char)ret_int(); 数値として代入したいのなら上記でイイと思います。 ですが、当然charには127以上の数値を(正しく)代入できません。 C文字列として変換したいのであれば #include <cstdio> char buff[5];//必要な桁+1 sprintf(buff,"%d", ret_int()); cout<<buff<<endl; とかすればいいと思います。
// strtolのライブラリのusing // iostreamのusing char* twelve = "12"; char* ret_ch() { return tewlve; } void main() { char* r = ret_ch(); char* p; int n = strtol(r, &p, 10); count << "RET" << n << endl; }
- PG_RankB
- ベストアンサー率40% (12/30)
・・・日本語が今ひとつはっきりしないのですが、ret_ch()の中で作った"12"を、整数としての12にして、char型の変数に返したいと言う事でしょうか? そうならば、文字列の"12"を、自力で数値に変換するか、atoi()などの標準関数を使用するかしないといけないと思います。 "12"は、文字列です。(内部的には数値ですがここでは気にしない事) "12"の先頭アドレスを返しているのですから、 res=*ret_ch()とした場合、"12"のアドレスの0番目の一文字を、resに格納する。 という意味になるので、当然1と出力されます。 スタンダードにやるなら、BLUEPIXY様の仰る通り、 char res; //ここでret_ch()の戻り値の実体数値を代入 res=atoi(ret_ch());//数値として代入 とすれば丸く収まるはずです。 char resを char *resとして、 res = ret_ch()とすれば、resのポインタを進めてその先を表示する事も出来ますが・・・
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
もう一つやりたいことが良く判らないので勘違いしてたらすみません。 C文字列から数値にするには、atoiとかstrtolとかを使えばいいです。 charですべての文字を受けるには、配列などにしてstrcpyすればいいと思います。 --------------------------------------------------------------- #include <iostream> #include <cstdlib> using namespace std; char *ret_ch(){ char *p="12"; return p; } int main(){ char res; //ここでret_ch()の戻り値の実体数値を代入 res=atoi(ret_ch());//数値として代入 cout<<"RET=="<<(int)res<<endl; char *ret=ret_ch(); cout<<"RET=="<<ret<<endl;//ポインタとして受けて文字列として表示 char buff[3]; strcpy(buff,ret_ch()); cout<<"RET=="<<buff<<endl; return 0; }
補足
追加ですが、 もし、戻り値がint型でその値をcharに格納する場合は、どのようにしたらいいのでしょうか? int ret_int(){ int res =2005; return res } int main(){ char res_ch; //ここでchar型の変数に格納するが?? res_ch=(char)ret_int(); cout<<res_ch<<endl; return 0; } よろしくお願い致します。