我正在尝试使用NSFullUserName
函数在c ++中获取当前用户名,但它返回NSString
。因此,如何在没有Obj-C代码的情况下在c ++中将NSString
转换为CString
?
答案 0 :(得分:2)
为此不使用Objective-C是绝对的愚蠢。
也就是说,您可以将NSString *
转换为CFStringRef
并使用CFString
函数获取C字符串。您可能会发现CFStringGetLength
和CFStringGetCString
函数以及kCFStringEncodingUTF8
常量非常有用。请记住,许多Unicode字符需要多个字节才能以UTF-8表示。
答案 1 :(得分:2)
NSString
与CFString
进行免费桥接(即,你可以只是强制转换指针 - 它指向的东西可以解释为任何一种类型),你可以操纵{{1}使用vanilla C调用。
因此,您通常会尝试CFStringGetCStringPtr
尝试将指针作为C字符串直接指向CFString
内容而不进行任何复制,然后再回到分配适当大小的C样式数组和{3}如果直接指针不可用(通常是因为您想要的编码与NSString
的内部编码不匹配)。
CFStringGetCString
将返回为给定编码和字符串长度分配的最大缓冲区大小,CFStringGetMaximumSizeForEncoding
给定字符串的长度。
所以,例如。
NSString