• 締切済み

VC++2005 型についてのエラー

現在VC++2005でプログラムを作成しています。 そこでテキストファイルに書かれて保存されているものをテキストボックスに表示するというものを作っています。 そして今は、ssという変数にその表示されているものを代入してあります。そこでそのssというものと7:00とテキストファイルに書かれているものを比べてみたいと考えています。 そこでstrcmpで比べてif文を作りたいのですが、下に書いたエラーで変換できませんと出てしまいます。 このような場合はどのように修正すればよいのでしょうか? 基本的な質問かもしれませんがよろしくお願いします。 「'strcmp' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)」 **************************************************************** String^ ss; ss=textBox2->Lines[0]; textBox4->Text=ss; if (strcmp(ss, "7:00")==0) { MessageBox::Show("7時"); } else { MessageBox::Show("それ以外"); } ****************************************************************

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

> プログラム通りにやってみたところ不正と判断しかされなくなってしまったのですが という事なら外のifがfalse、つまりDateTime::TryParse()で失敗しているという事ですから、「ssの中身が時刻として認識できる文字列ではない」ってことになります。

xxmajimaji
質問者

お礼

わかりました。 ありがとうございます。

回答No.4

System::Stringの文字列比較は「String.Compare()」を使う。 if (String.Compare(ss,"7:00")==0) { は試したか?

xxmajimaji
質問者

お礼

まだです。 試してみます。ありがとうござました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

C++/CLIでやるなら .NETFrameworkに用意されているクラスを使ってプログラミングするようにしましょう 今回は時間(時刻)を比較したいのですから DateTime型を使いましょう 例 String ^ss = textBox1->Lines[0]; DateTime dt; // ssの内容が 時刻に変換可能かチェック if ( DateTime::TryParse( ss, dt ) ) {   // 変換できたのなら『7:00』かどうかをチェック   if ( dt == DateTime::Parse("7:00") ) {     MessageBox::Show("7時");   } else {     MessageBox::Show("それ以外");   } } else {   // 変換できなかった場合   MessageBox::Show("時刻として不正です"); } # 行頭の字下げには全角文字の空白がありますので置換してください

xxmajimaji
質問者

補足

ご指摘ありがとうございます。 プログラム通りにやってみたところ不正と判断しかされなくなってしまったのですが、この場合は"7:00"というところが間違っているのでしょうか?

回答No.2

 こんばんは。  System::String^はchar*とは全くを以って性質の違う物です。  if(ss == "7:00")  で比較が出来ます。  しかし、どうしてもと言うのであるならば、  using namespace System::Runtime::InteropServices;  //マーシャリングする  IntPtr iptr = Marshal::StringToHGlobalAnsi(ss);  if (strcmp(static_cast<const char*>(iptr.ToPointer()), "7:00")==0) {     MessageBox::Show("7時");  }  else {     MessageBox::Show("それ以外");  }  //割り当てられるので必ず開放する  Marshal::FreeHGlobal(iptr);  とする事も出来ます。

xxmajimaji
質問者

補足

ありがとうございます。 if(ss == "7:00")はもう試していたのですが出来ませんでした。 マーシャリングというものもエラーが出てしまいました。

noname#76085
noname#76085
回答No.1

VC++の経験はないですが、C言語は使えます。 その上での回答ですが。 コンパイルエラーに出ている通りです。変数の型が合わないだけです。 変数の型についてもっと知りましょう。

xxmajimaji
質問者

お礼

わかりました。 ありがとうございます。