-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

如果cwhere a char*,以下将起作用:

g_uid.assign(c, size);

问题是c不是char*,它是一个 128 秒的数组char*

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

这是 C/C++ 中常见的初学者错误。我记得以前也犯过同样的错误。像这样的声明 char *c[128];并没有给你一个 128 个字符的数组,正如你可能被引导相信的那样。它实际上为您提供了一个包含 128 个指向chars 的指针的数组。你不想要那个。

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

char c[128];

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

于 2013-03-03T21:42:01.370 回答