将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数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将char数组转换为int数组[重复]

将一个char数组转换为几个String [重复]

如何将char数组转换回字符串[重复]

将char数组转换为字符串并将其用作标签文本[重复]

Objective C - 以十六进制格式将 char[] 转换为 NSString

在C#中将Char数组转换为字符串[重复]