ページ 1 / 1
String型からchar*型の方法
Posted: 2010年9月14日(火) 19:24
by えり
質問させていただきます。
現在、下記のようなコード(下記はサンプルコード)を作成し、
C++.NETのString型からC言語のchar*型に引数として渡す、
というプログラムを作成しています。
しかし、コンパイルは通るのですが、
「'System.FormatException'のハンドルされていない例外が
mscorlib.dllで発生しました。
追加情報:Stringには一文字しかしようできません。」
というエラーがデバック時に発生してしまい、これをとることが
できません。
どのような処理を行えばエラーがなくなるのでしょうか?
また、そのC++.NETのString型からC言語のchar*型に引数として渡す手段が
あるのでしょうか?
ぜひご教示ください。
よろしくお願いいたします。
#include "stdafx.h"
using namespace System;
void func(char *c);
int main()
{
String ^str = "asc";
func((char *)Convert::ToChar(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 20:01
by dic
.NET の場合はわかりませんが
Visual C++ 6.0 STL の場合です
string の内容はconst char* の配列だったような気がするので変更ができなかったような・・・
#include <iostream>
using namespace std;
void func( string *str )
{
cout << "string:" << str->c_str() << endl;
}
int main()
{
string str( "abc" );
func( &str );
return 0;
}
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 20:43
by バグ
Stringクラスには、ToCharArrayというメソッドがあったような…
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 20:50
by たかぎ
http://support.microsoft.com/kb/311259/ja
↑では?
ちなみに、ToCharArrayなど、Charが付く名前のメソッドでは、C#のchar、つまりC++/CLIではwchar_tにしかなりません。
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 23:38
by えり
>たかぎさん
ちなみに、
http://support.microsoft.com/kb/311259/ja
に書かれている方法をためしたところ(Visual C++ 2008)、
方法1は
int main()
{
String ^str = "asc";
func(PtrToStringChars(str));
return 0;
}
void func(char *c)
{
c[1] = 'b';
return;
}
というコードでコンパイルしたところ、
error C2664: 'func' : 1 番目の引数を 'cli::interior_ptr<Type>' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
Type=const wchar_t
]
マネージ型をアンマネージ型に変換できません。
というエラーがでてしまいました。
また、方法3は
<atlstr.h>
がなかったためためしていません。
また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
ためしていません。
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 23:41
by えり
dic ..比類無きプログラマーさん、
バグ ..ハッカーさん、
ありがとうございます。
明日会社に行ってから試してみたいと思います。
Re:String型からchar*型の方法
Posted: 2010年9月14日(火) 23:48
by たかぎ
> また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
> ためしていません。
意味がわかりません。
方法1では、ワイド文字列しか得られませんので、そこからさらに変換する必要があります(サンプルを見ればわかりますよね?)。
Re:String型からchar*型の方法
Posted: 2010年9月15日(水) 19:43
by えり
みなさん,ありがとうございます。
解決しました!
もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
Re:String型からchar*型の方法
Posted: 2010年9月15日(水) 23:56
by たかぎ
> wchar_t型からchar型に変換する方法を教えていただけないでしょうか。
字面どおりに解釈すれば、単にキャストするか、wctob関数を使ってください。
ワイド文字から多バイト文字、あるいはワイド文字列から多バイト文字列への変換であれば、また別のやりかたがあります。
Re:String型からchar*型の方法
Posted: 2010年9月16日(木) 06:40
by toyo
文字コードの変換ならVisualC++にはWideCharToMultiByte関数があります