在C ++中用Char *创建一个std :: string

时间:2013-03-03 21:19:44

标签: c++ string type-conversion macos-carbon

OSX 10.8,Carbon

我有一个std :: string,我想从Char *

派生

示例:

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 = "";被定义为全局

3 个答案:

答案 0 :(得分:2)

你对星号过于慷慨 - 你通常不需要指向CFStringRef的指针,你的数组实际上是一个指针数组,这不是你想要的。

看起来应该更像这样:

CFStringRef s;
char c[128];

if (CFStringGetCString(s, c, 128, kCFStringEncodingUTF8))
{
    g_uid = c;
}
else
{
     // 128 characters wasn't enough.
}

答案 1 :(得分:0)

如果c位于char*,则可以使用以下内容:

g_uid.assign(c, size);

问题是c不是char*,而是一个128 char* s的数组:

char *c[128];

答案 2 :(得分:0)

这是C / C ++中常见的初学者错误。我记得当天回到同样的错误。像这样的声明 char *c[128];并没有给你一个128个字符的数组,因为你可能会相信它。它实际上给你一个128个指向char的指针数组。你不希望这样。

您想声明一个包含128个字符的数组,如下所示:

char c[128];

现在您可能认为c不是char*,因为您没有看到任何*,但是只要您声明某个数组,该变量就会自动成为指针您指定的任何类型。它实际上指向数组的第一个元素的地址。