簡體   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