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 = "";
被定义为全局
答案 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*
,因为您没有看到任何*
,但是只要您声明某个数组,该变量就会自动成为指针您指定的任何类型。它实际上指向数组的第一个元素的地址。