• 締切済み

C++/CLIにて、System.String^型からChar*への変換。または、fopen_s以外のファイル出力方法

現在、VisualC++2005の「空のCRLプロジェクト」からコツコツプログラムを組んでいます。 ファイルを読み込む→処理→他のファイルに結果を出力という単純なプログラムなのですが、入力、出力ファイル名を共に、コンソール画面から入力するというところで困っています。 コンソールから読み込みについては、バッチの利用も考えてmain関数で、  int main(array<String^>^ (変数名)) とし、String^型でファイル名を読み込みました。 しかし、実際にファイルを呼び出す際には、  fopen_s(&fp, (char*型ファイル名) ,"a"); を利用するため、char*型に変換しなければなりません。 ToCharArrayを試しましたが、 'cli::array<Type,dimension> ^' から 'char *' に変換できません。 とエラーが出ますし(過去の質問にもあります)、キャストも同様です。 ファイル名の読み込みをchar*にもしてみましたが、String^にするようにとのエラーが出ました。 何か良い解決方法はないでしょうか。 (1)String^型からChar*へ変換する (2)String^型でファイルを開く(fopen_s以外の)関数を探す などの解決法があると思いますが、どちらでもかまいません。 ご存知の方、よろしくお願いします。 情報が不足していましたら、どのような情報が必要かもお教えください。 よろしくお願いします。

みんなの回答

  • Tristia
  • ベストアンサー率0% (0/0)
回答No.3

お手軽に~ String^ saki; char moto[32]; sprintf( moto, "%s", saki ); エラー処理考えてませんが・・・ーー;

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2
center
質問者

お礼

ご回答ありがとうございました。 この方法も試みたのですが、数値を出力することが目的であるため、文字列の変換が面倒になってしまい、今回はNo.1さんの方法を利用することにしました。 Stirng型の文字列をそのまま出力する際に利用してみようと思います。 ありがとうございました。

回答No.1

System::String^ → char* 下記URL参照

参考URL:
http://msdn2.microsoft.com/ja-jp/library/d1ae6tz5.aspx
center
質問者

お礼

ご回答ありがとうございました。 この方法を使って、プログラムを完成させることができました。 ヘルプやネットはチェックしたつもりだったのですが、探し方が悪かったみたいです。 ありがとうございました。

関連するQ&A

  • System::Stringからconst charへの変換

    aという変数がSystem::String型であります。 そこで次に行いたい処理のために、const char*に変換したいのですが、下記のページを参考にプログラムしてみたのですがうまくいきませんでした。 うまくいかなかったというのはまだSystem::String型のままで変換できていなかったとエラーで出てしまいます。 そのような場合は、どのように型変換すればよいのでしょうか?

  • System::String->char*変換でき

    C++/CLIでSystem::String^文字列をchar*に変換する関数を書いたのですが、256文字以上の文字列を投げて、戻値を確認してみると、255文字分しか中身が詰まっていません。元の文字列はアスキーのみです。 #include <msclr/marshal.h> using namespace msclr::interop; static char* toPtChar(const String^ Text) { String^ temp = (String^)Text; msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context(); char* res = ((char*)(context->marshal_as<const char*>(temp))); return res; } この関数をどのように変更すれば、256文字以上変換できるでしょうか?

  • char型の文章をconst char*型に変換

    Visual C++ MFCでアプリケーション作成している者です。 現在、エディットコントロールに入力したファイルパスを取り込んで、ファイルのデータ読み込みをおこなうプログラムを作成しております。 しかし、当方プログラムの型など細かいことがあまりわからないため、目的が達成できず困っていたので、この場をお借りして質問しました。 コードの感じは以下のようになっております。 ------------------------------------------ TCHAR FPath;  // ファイルパスが入る FILE *fp; m_edit.GetWindowText( FPath, MAX_PATH ); // m_edit:エディットコントロールのメンバ変数 fopen_s( &fp, [FPathのconst char*], "r" ); ------------------------------------------- char型からconst char型へ変換できればいいのですが、ちょっとよくわからず… ご回答、宜しくお願い致します。

  • C++型変換

    型変換が難しいです。 デバッグやフォームへ文字を表示するのに型変換で躓いています。 charからstringとやBYTEからstringなど相互変換の需要はあまりないのでしょうか? char2stirngとか一式どこかにないですか? そもそもMicrosoftがこう言った型変換を簡単にするのを提供しないのはなぜでしょう? VBはあまり意識せずできていたので、VBからするとメッセージボックスに文字や数字を出すだけでも一苦労です。

  • 'const char *' 型は 'char *' 型に変換できない ??

    Case 1 Text9.Text = "AB"; Text10.Text = "A"; // 1文字目 Text11.Text = "B"; // 2文字目 case 2; Text9.Text = "Ab"; Text10.Text = "A"; Text11.Text = "b"; case 3; Text9.Text = "aB"; Text10.Text = "a"; Text11.Text = "B"; case 4; Text9.Text = "ab"; Text10.Text = "a"; Text11.Text = "b"; 上記のようなCase 文を C を使って作成したいのですが, A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき, 1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが, 'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください. #include <stdio.h> #define MAX_NAME 256 int main(void) { const char *NAME12 = "Text9"; const char *NAME1 = "Text10"; const char *NAME2 = "Text11"; const char *ALPH = "ABCDEFGHIJabcdefghij"; FILE *fp = NULL; char f_name[MAX_NAME]; int count = 0; char *p = ALPH; char *q = ALPH; printf("ファイル名:"); scanf("%s", f_name); fp = fopen(f_name, "w"); if (fp == NULL) { printf("'%s':ファイルが見つかりません\n", f_name); } else { for (p = ALPH; *p != '\0'; p++) { for (q = ALPH; *q != '\0'; q++) { if (*p != *q) { count++; fprintf(fp, "Case %d\n", count); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q); } } } fclose(fp); } return 0; }

  • JavaでString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • 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; 全部だめでした、どなたかご存知の方お見えになれば教えていただけると助かります。

  • int → char → string の変換

    お世話になります。 現在 VisualStudio2005 C# のコンソールアプリを作っています。 以下の場合どのようにすれば解決しますでしょうか? int code = 0xF97E; // この値をF97Eという文字(外字)にしたい 以下のように記述してみましたが、駄目でした。 int hex1 = ((code & 0xff00) >> 8); // (hex1==0xF9)になる int hex2 = (code & 0x00ff); // (hex2==0x7E)になる string s = char.ToString((char)hex1) + char.ToString((char)hex2 )); // (s==u~==0x757E)になってしまう。 原因がわかる方いらっしゃれば教えてください。

  • unsigned char SJis[2]からstd::stringに変換

    開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?

  • 【Java】数字の判定、Stringへの型変換

    コマンドライン引数を渡して(桁数は様々)、 渡ってきた値が数字のみの場合は値をそのまま出力、 数字のみでなければ1文字ずつ縦に出力するプログラムを作りたいです。 Exceptionを発生させたり正規表現で判定するのではなく、 isNumericを使いたいのですが、型が違うので使えません。 1文字ずつ出力するのはcharAtかなと思ったのですがこれも型が違う。 型変換するにもどこですればいいのか分からず… どこを変えれば良いのか教えて下さい。 public class Test1 { public static void main(String[] args) { if(StringUtils.isNumeric(args)){ System.out.println(args); }else{ for(int i = 0; i<args.length; i++){ System.out.println(args.charAt()); } } } }

    • ベストアンサー
    • Java