• ベストアンサー

String^の^自体が何を意味しているのか、わかりません。

String^ msg = "テスト"; は、 char msg[] = "テスト"; と同じ意味でしょうか? String^の^自体が何を意味しているのか、わかりません。 TurboCからC言語は殆ど使っていませんので、戸惑っています。 VS2005を覚えようとしているのですが、なかなか取っ付きにくいです。 意識改革できる参考書などご存知の方も教えてください。

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

簡単にいうと^(ハットマーク)は実体がヒープに確保されるという意味です。 他の方の指摘の通り、これはC++/CLIと呼ばれる言語でC++で.NET Frameworkを 利用するために拡張した言語です。 .NET Frameworkのクラスはガベージコレクションで管理されている為 C++のクラスとは別に管理する必要があります。その為 ^(ハットマーク)をつける事により区別しています。 ちなみにC++マネージ拡張とC++/CLIは違います。 2003以前の仕様をC++マネージ拡張と言い 2005以降のものをC++/CLIと言います。 System::Stringはスタックに置くことは出来ないので System::String^ msg; となります。 System::Drawing::Color等は スタックに置くこともヒープに置くことも可能です。 System::Drawing::Color^ col1 = gcnew System::Drawing::Color(); System::Drawing::Color col2; int test1 = col1->R; int test2 = col2.R; C++/CLIの参考書としては 中 博俊著 「実践 C++/CLI 極めるための基礎と実用テクニック」 がありますが、 まずC/C++を理解していることが前提になっていますので もしC/C++の理解に不安があるようなら先に勉強した方が良いでしょう。 有名な書籍だと「独習C」と「独習C++」があります。 前述の通りC++/CLIは.NET Frameworkを使うためのものですが .NET Frameworkを使いたいのであればC#の方が良いと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

StringクラスってことはC++マネージ拡張かな? C++マネージ拡張は、.NETフレームワークにおけるC++の拡張仕様で、C++/CLIとも言います。 私もC++/CLIには詳しくないので、String^が何を意味するかは分かりません。 少なくともTurboCからC++/CLIは間を飛ばしすぎだと思います。 C言語が理解できているのなら、まずC++を勉強されてはいかがでしょうか?オブジェクト指向が分からないとVC++2005は使いこなせません。 その上で、WindowsAPIやMFCなどのWindowsアプリを書く勉強をされたほうが良いと思います。さらにその先でC++/CLIに行けばよろしいかと。 C++の推薦本としては、「明解C++」を推薦します。 http://www.amazon.co.jp/%E6%98%8E%E8%A7%A3-C-%E6%9F%B4%E7%94%B0-%E6%9C%9B%E6%B4%8B/dp/4797334819 ざっと、VC++の機能を参照できる本としては、「Visual C++.NET逆引き大全500の極意」なんかどうでしょうか? http://www.amazon.co.jp/Visual-NET%E9%80%86%E5%BC%95%E3%81%8D%E5%A4%A7%E5%85%A8500%E3%81%AE%E6%A5%B5%E6%84%8F-Windows-2000-NT%E5%AF%BE%E5%BF%9C/dp/4798010960/ref=sr_1_4/503-3751518-7060735?ie=UTF8&s=books&qid=1185932878&sr=1-4

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> String^ msg = "テスト"; > は、 > char msg[] = "テスト"; > と同じ意味でしょうか? 違います。 > String^の^自体が何を意味しているのか、わかりません。 > TurboCからC言語は殆ど使っていませんので、戸惑っています。 この構文はC言語のものではないので当然です。 C++/CLIについて調べてみるとよいでしょう。 名前こそ似ていますが、C++とC++/CLIは別の言語です。PL/IとPL/SQLほどは違わないという程度に考えてください。

参考URL:
http://vene.wankuma.com/ecma372/StartingState.aspx
全文を見る
すると、全ての回答が全文表示されます。
  • ryopis
  • ベストアンサー率20% (49/238)
回答No.1

"^" が意味しているものはわかりませんが、 string msg = "テスト"; と、 char msg[] = "テスト"; は違います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • String型をchar型配列にしたい

     VC++2005ExpressEdition + PlatformSDKを使用しています.  String型をchar型配列に変換したいと思っています.  自分なりに調べてみたのですが, > String^ str = gcnew String("test"); > char chr[5]; > chr = str->ToCharArray(); などとしても次のようなエラーが出ます. > error C2440: '=' : 'cli::array<Type,dimension> ^' から 'char [5]' に変換できません。  String型からchar型配列への変換はどのようにすればいいのでしょうか.

  • ポインタ・ハンドル間のコピーと表示方法について VC++

    以下、サンプルですが、ポインタ・ハンドル間のコピーと 表示方法がわかりません。 VC++2005を使っている方、教えてください。 /* C++ ポインタとハンドル間のコピーと、表示させる方法が知りたいです。 */ using namespace System; namespace test { class Class1 { char msg[1024]; public: Class1(String^ _msg){ // _msgを msgにコピーする ポインターに // msgを表示 } }; ref class Class2 { static String ^msg = nullptr; public: Class2(char *_msg){ // _msgを msgにコピー ハンドル?に // msgを表示 } }; } //----------------------------------------------- // こんな書き方でよいのか? 古いC? // 引数は必要ないのでしょうか? //----------------------------------------------- int main(){ test::Class1* c1 = new test::Class1("test1"); delete c1; test::Class2^ c2 = gcnew test::Class2("test2"); return 0; }

  • C# String str = @”test”;の@の意味

    C#でStringに文字列を代入する際に String str = @”TEST”; などと「@」をつけているコードがWeb上にありますが @の意味はなんですか?また@以外で似たような 記号があれば教えてください。

  • 【C++/CLI】int型からString型への変換

    C++/CLIにて、int型変数の値 int test1 = -1; int test2 = -10; をString型に変換し「-1」「-10」といったような文字列に、 変換しようと思っています。 String::Format( "{0:D1}", test1 ); String::Format( "{0:D2}", test2 ); といった方法で可能なのは分かったのですが、 この方法だと、Formatの引数を値の桁数に応じて変えねばなりません。 ※String::Format( "{0:D2}", test1 );  のようにすると、「-01」となってしまうため。 桁数を意識せずに、int型変数の値をそのまま文字列に変換するような 良い方法があれば、ご教示お願いできませんでしょうか?

  • NULL領域を読み書きするの意味が?

    C言語の初学者です。 コンパイラは、Borland C++ 5.5.1 for Win32 を使っています。 たまたま見つけた C magazine プログラミングの禁じ手Web版 C言語編で、「NULL領域を読み書きする」という個所があり、下記ソースで発覚すると掲載されていました。 (http://www.cmagazine.jp/src/kinjite/c/null.html#index5) void f() { static char *theTxt; strcpy(theTxt,"TEST\n"); printf("%s",theTxt); } 自分の環境で、下記のソースで動かしてみたところ、アプリケーションエラーになりました。 #include <stdio.h> #include <string.h> int main(void) { static char *theTxt; /* (1) */ strcpy(theTxt,"TEST\n"); printf("%s",theTxt); return 0; } この禁じ手の意味そのものが、全く理解できませんでした。 ・NULL領域というのは、(1)のstatic定義されたポインタことをさしているのか? ・(1)の static をつけないで実行すると、正常終了したので、static の領域に書き込んではいけないのか? (そんなことはないと思うのだが)

  • C#におけるstringとstring[]データの変換

    お世話になります。C#をはじめて使っています。 いま行おうとしているのがコモンダイアログからファイル名を取得して、CSVファイルを読み出そうとしています。 OpenFileDialogから出力されるファイル名はstring[]と配列になり(すいません、C#でも”配列”といっていいのですよね?) CSVを開くためのTextFieldParserの引数はstringになります。Cならポインタで変換できるのですが、C#はポインタがないため、いくつか試しましたが、うまく変換でききませんでした。 たとえば string a; string[] b: で  a=b; a=(string)b; a=convert.tostring b; 全部だめでした、どなたかご存知の方お見えになれば教えていただけると助かります。

  • String文字列を16進数のint型に変換

    String^ test = Wireless_ID_str02[i]->s_rssi; このtestには"1c"という文字列が入っているのですが、この文字をint型の int rssi_dec = ****** この中に入れたいのですが、方法はないでしょうか? ちなみに、 rssi_dec = strtol(test, &endptr, 16); こんなことをやってみたのですが、こんなエラーがでました。 error C2664: 'strtol' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 使用可能なユーザー定義された変換演算子がない、または 1> マネージ型をアンマネージ型に変換できません。 どうぞ、よろしくお願い致します。

  • c++の「:」の意味

    -------------------------------------------------- class Hoge { public:  Hoge(const char* msg)   :kMessage_(msg), kCount_(100000000), kInterval_(1000000)   {} … private:  const char *kMessage_; -------------------------------------------------- c++の勉強をしています。 いろいろ検索して調べていると、こんな感じのコードに出会いました。 「:」の部分の意味を教えていただきたいです。★ googleで検索しようとしたのですが、「:」をうまく使えず見つけれなかったので、 検索の仕方か説明サイトも教えていただけると助かります。 雰囲気的に、constな定数変数を引数で設定したいときに、 メンバ変数名と同じ名前のsetterが暗黙に定義される的な感じだと思うのですがはっきりしたいです。 よろしくお願いします。

  • c言語strchrのキャスト前後意味

    C言語strchrkのc=(char)c の キャスト前と後のcの意味を教えてください。