• 締切済み

C++のnew演算子で動的確保

new()を初めて使ってみました。 エラーは無かったけど、間違いがあったら教えてください。 #include <iostream.h> main(){ int n = 0; char* str = "mojisuufumei"; char* myValue; while(!str[n])n++; myValue = new char[n+1]; strcpy(myValue, str); cout << myValue; delete []myValue; } char*型のmyValueを動的確保したつもりです。 myValue[0], myValue[1], … のそれぞれの値を unsignedにして宣言したい場合はどうしたらいいんですか? #include <iostream.h> main(){ int n = 0; char* str = "mojisuufumei"; unsigned char* myValue; while(!str[n])n++; myValue = new unsigned char[n+1]; strcpy(myValue, str); cout << myValue; delete []myValue; } だと、strcpy()のとこでコンパイルエラーでした。

みんなの回答

  • Esna
  • ベストアンサー率36% (4/11)
回答No.2

こんにちは.Esnaです. キャストしてもだめでしたか? (あんまりいい方法では,ありませんが…) だめなら,strcpy()関数ライクな関数を自分で作る のも手だと思いますけど.

  • Esna
  • ベストアンサー率36% (4/11)
回答No.1

こんにちは.Esnaです. newの使い方としては,いいのではないでしょうか. strcpy()のエラーは,strcpyの第1引数の型が,char *型を要求しているので発生しているのだと思います. 無理やり変数をchar *にキャストすれば,コンパイラは通るとは思います. あとは,strcpy()を使うならstring.hをincludeしておいたほうがいいでしょう.(namespace使ってcstringでもいいです.)普通はしておかないとエラーになりますが,iostream.hの中のどこかでincludeされている場合もあるのでそのときは,普通に実行できますけどね.

A__
質問者

お礼

ありがとうございます。変なところをキャストしていました。 strcpy(myValue, str);をキャストしてできました。

A__
質問者

補足

strcpy() に関してのincludeは問題なかったです。 でも、まだunsignedにすることができません。