将NSString转换为char数组[重复]
Posted
技术标签:
【中文标题】将NSString转换为char数组[重复]【英文标题】:Convert NSString to char array [duplicate] 【发布时间】:2014-03-19 04:07:30 【问题描述】:const char arr[]="Hello There";
我正在尝试创建一个如上所述的字符数组。
下面是我使用的代码。这是创建 char 数组的正确方法吗?
-(void) createCharArray:(NSString*) text
char arr[text.length];
for(int i=0;i<text.length;i++)
arr[i]=[text characterAtIndex:i];
我们是否需要担心空终止? 我们还有其他方法可以达到同样的效果吗?
【问题讨论】:
简单:const char arr[]="Hello There";
。当然,如果你想从 NSString 创建一个 char 数组,那么也许你想查看 NSString 的规范并选择它提供的几种方法之一。
【参考方案1】:
您可以使用UTF8String
。例如:[myString UTF8String]
。
【讨论】:
我认为 UTF8String 返回一个字符数组指针 它返回一个char*
,你可以像使用char[]
一样使用它。
与 C 一样,“数组”是一个模糊的术语。
char c[]=[文本 UTF8String];抛出错误“数组初始化器必须是字符串文字的初始化器列表”
所以使用 char *c = [text UTF8String];您需要一个指向动态分配的字符缓冲区的指针,而不是静态创建的 C 字符串。【参考方案2】:
不,这在多个层面上都不是正确的方法。 NSString 支持 unicode,远远超过一个字节数组所能容纳的字符数。
如果要将 unicode 转换为 8 位字符,则需要使用 UTF8 之类的编码。
看一下getCString:maxLength:encoding:方法,尝试使用NSUTF8StringEncoding。
该方法应该通过一次调用完成您想做的事情。
【讨论】:
【参考方案3】:使用,
NSString *str = @"Hello There";
const char *c = [str cStringUsingEncoding:NSUTF8StringEncoding];
【讨论】:
这将返回一个指针而不是一个数组。 @andyPaul 指向字符的指针可以像字符数组一样使用(c[0] 重新运行 'H') 不适用于非拉丁字符。以上是关于将NSString转换为char数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章