String型からchar*型の方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
えり

String型からchar*型の方法

#1

投稿記事 by えり » 15年前

質問させていただきます。
現在、下記のようなコード(下記はサンプルコード)を作成し、
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;
}

dic

Re:String型からchar*型の方法

#2

投稿記事 by dic » 15年前

.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*型の方法

#3

投稿記事 by バグ » 15年前

Stringクラスには、ToCharArrayというメソッドがあったような…

たかぎ

Re:String型からchar*型の方法

#4

投稿記事 by たかぎ » 15年前

http://support.microsoft.com/kb/311259/ja
↑では?

ちなみに、ToCharArrayなど、Charが付く名前のメソッドでは、C#のchar、つまりC++/CLIではwchar_tにしかなりません。

えり

Re:String型からchar*型の方法

#5

投稿記事 by えり » 15年前

>たかぎさん

ちなみに、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*型の方法

#6

投稿記事 by えり » 15年前

dic ..比類無きプログラマーさん、
バグ ..ハッカーさん、

ありがとうございます。
明日会社に行ってから試してみたいと思います。

たかぎ

Re:String型からchar*型の方法

#7

投稿記事 by たかぎ » 15年前

> また、方法2、方法4は、今回char型宣言を使用しないプログラムを作成したかったので
> ためしていません。

意味がわかりません。
方法1では、ワイド文字列しか得られませんので、そこからさらに変換する必要があります(サンプルを見ればわかりますよね?)。

えり

Re:String型からchar*型の方法

#8

投稿記事 by えり » 15年前

みなさん,ありがとうございます。
解決しました!

もう一つ質問させてください。
wchar_t型からchar型に変換する方法を教えていただけないでしょうか。

たかぎ

Re:String型からchar*型の方法

#9

投稿記事 by たかぎ » 15年前

> wchar_t型からchar型に変換する方法を教えていただけないでしょうか。

字面どおりに解釈すれば、単にキャストするか、wctob関数を使ってください。
ワイド文字から多バイト文字、あるいはワイド文字列から多バイト文字列への変換であれば、また別のやりかたがあります。

toyo

Re:String型からchar*型の方法

#10

投稿記事 by toyo » 15年前

文字コードの変換ならVisualC++にはWideCharToMultiByte関数があります

閉鎖

“C言語何でも質問掲示板” へ戻る