繁体   English   中英

在C ++中用Char *制成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.
}

如果cchar* ,则可以进行以下操作:

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];

现在,您可能不认为cchar*因为您看不到任何*但是在每次声明某物数组时,该变量将自动成为您指定的任何类型的指针。 它实际上指向数组的第一个元素的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM