![](/img/trans.png)
[英]C++ turn a std::tuple<char, char, char> into a std::string?
[英]Making a std::string out of a Char* in C++
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 = "";
被定义为全局
您对星号过于宽容-通常不需要指向CFStringRef
的指针,并且您的数组实际上是一个指针数组,这不是您想要的。
它看起来应该像这样:
CFStringRef s;
char c[128];
if (CFStringGetCString(s, c, 128, kCFStringEncodingUTF8))
{
g_uid = c;
}
else
{
// 128 characters wasn't enough.
}
如果c
为char*
,则可以进行以下操作:
g_uid.assign(c, size);
问题是c
不是char*
,它是128个char*
s的数组:
char *c[128];
这是C / C ++中常见的初学者错误。 我记得在同一天犯了同样的错误。 像char *c[128];
这样的声明char *c[128];
可能会导致您相信,但没有提供128个字符的数组。 实际上,它为您提供了一个指向char
的128个指针的数组。 你不要那样
您要声明一个128个字符的数组,如下所示:
char c[128];
现在,您可能不认为c
是char*
因为您看不到任何*
但是在每次声明某物数组时,该变量将自动成为您指定的任何类型的指针。 它实际上指向数组的第一个元素的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.