NSString*到char*? 我写了一段代码,它使用C++和ObjultC.
我需要将NSString*到char*? 我写了一段代码,它使用C++和ObjultC.,c++,ios,objective-c,nsstring,char,C++,Ios,Objective C,Nsstring,Char,我需要将NSString*转换为char*[str UTF8string]不起作用,因为它返回const char*。我知道: std::string->char*:char*c=const_cast(pathStr.c_str()) NSString*->std::string: 但它看起来太奇怪了,我还是无法证实。我能否以更好的方式转换它,例如,NSString*->const char*->char*您最可能遇到的是编译器警告,如: Initializing 'char *' with
NSString*
转换为char*
<代码>[str UTF8string]不起作用,因为它返回const char*
。我知道:
->std::string
:char*
char*c=const_cast(pathStr.c_str())代码>
->NSString*
:std::string
但它看起来太奇怪了,我还是无法证实。我能否以更好的方式转换它,例如,
NSString*
->const char*
->char*
您最可能遇到的是编译器警告,如:
Initializing 'char *' with an expression of type 'const char *' discards qualifiers
编译器给出了这个特定的警告,因为如果没有限定符const,指针可以被解除保护,然后再进行修改。这不仅仅是一个技术问题,实际上是一个需要谨慎对待的警告
将其转换为字符*
(char*)[str UTF8String];
只要你不想编辑它。。。如果您这样做了,那么将其strcpy到一些char数组中
我想这取决于你想用它做什么。
< p>我的C++有点生疏,但是你需要决定你的字符串是ASCII还是Unicode,然后从那里走。例如:std::string foo = std::string( [str cStringUsingEncoding: NSASCIIStringEncoding] );
如果需要Unicode字符串,则需要首先构造一个以uint16\u t null结尾的数组,并将其传递给构造函数:
NSUInteger len = [str length];
uint16_t str = calloc(len+1, sizeof(uint16_t);
for(int i=0; i<len; ++i) {
str[i] = [str characterAtIndex:i];
}
std::u16string foo = std::u16string( str );
nsu整数len=[str length];
uint16_t str=calloc(len+1,sizeof(uint16_t);
对于(int i=0;i注意:
返回的C字符串是指向字符串内部结构的指针
对象,其生存期可能比字符串对象短,并且
肯定不会有更长的寿命。因此,你应该复制
如果需要将C字符串存储在
你称之为这个方法
如果您计划修改字符串,或者如果您计划在较长时间内使用它,请对其执行适当的复制操作。或者使用getCString:maxLength:encoding:
直接创建副本
如果您不打算修改字符串,那么理论上就没有必要强制转换为非常量(尽管许多接口确实在应该调用const char*
parm时调用char*
,所以有时您必须作弊)。为什么需要char*而不是const char*?-您真的需要修改它吗(如果C++使用STD::string而不是char *进行操作)这可能有助于我需要char,而不是const char。你的注释是“代码> char const */COD>不是和代码> char */CODE相同的类型。把前者分配给后者是一个错误,而不是警告。我是C++中的新手。使用函数外部的getCString:
可以可靠地使用char*
变量,直到该函数完成,不是吗?您可以发布一个具体的示例。我尝试了以下方法:,但它返回一个空字符串,就像strcpy一样。