【问题标题】:Convert NSString to char array [duplicate]将NSString转换为char数组[重复]
【发布时间】: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 的规范并选择它提供的几种方法之一。

标签: ios objective-c arrays char


【解决方案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')
    • 不适用于非拉丁字符。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多