-1

OSX 10.8、カーボン

Char* から派生させたい std::string があります

例:

CFStringRef *s;
char *c[128];

CFStringGetCString(*s, *c, 128, kCFStringEncodingUTF8);

int size = sizeof(c);
g_uid.assign(c, size);

しかし、無効な変換が行われ、その理由がわかりません

error: invalid conversion from 'char**' to 'long unsigned int'

std::string g_uid = "";グローバルとして定義されています

4

3 に答える 3

2

あなたはアスタリスクに寛大すぎます-あなたは一般的にへのポインタを必要としませんCFStringRef、そしてあなたの配列は実際にはあなたが望むものではないポインタの配列です。

次のようになります。

CFStringRef s;
char c[128];

if (CFStringGetCString(s, c, 128, kCFStringEncodingUTF8))
{
    g_uid = c;
}
else
{
     // 128 characters wasn't enough.
}
于 2013-03-03T21:45:53.917 に答える
0

cここで、が機能する場合はchar*、次のようになります。

g_uid.assign(c, size);

問題はそうでcはないということですchar*、それは128char*秒の配列です:

char *c[128];
于 2013-03-03T21:21:56.637 に答える
0

これは、C/C++ でよくある初心者の間違いです。私は昔、同じ過ちを犯したことを覚えています。のような宣言で char *c[128];は、128 文字の配列が得られるわけではありません。実際には、charsへの128個のポインターの配列を提供します。あなたはそれを望んでいません。

次のような 128 文字の配列を宣言します。

char c[128];

s が表示されないため、これcが a であるとは思わないかもしれませんが、何かの配列を宣言すると、その変数は自動的に、指定した型のポインターになります。実際には、配列の最初の要素のアドレスを指しています。char**

于 2013-03-03T21:42:01.370 に答える