Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSString*到char*? 我写了一段代码,它使用C++和ObjultC._C++_Ios_Objective C_Nsstring_Char - Fatal编程技术网

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一样。