【问题标题】:How can I pass a C array to a objective-C function?如何将 C 数组传递给目标 C 函数?
【发布时间】:2012-06-28 14:55:27
【问题描述】:

我不熟悉 C。如何将 C 数组传递给 Objective-C 函数?

我实际上需要一个将 NSArray 转换为 C 数组的类函数的示例。 这是我目前所拥有的:

+ (NSArray *)convertArray:(NSString*)array { //I don't think this is correct: the argument is just a NSString parameter and not an array

    NSMutableArray * targetArray = [NSMutableArray array];

    for (i = 0; i < SIZE; i++) //SIZE: I dunno how to get the size of a C array.
    {
        [targetArray addObject: [NSString stringWithString:array[i]];
    }
    return targetArray;
}

【问题讨论】:

标签: objective-c c


【解决方案1】:

有几种方法。

如果你的数组大小在编译时是固定的,你可以使用 C99 static 修饰符:

-(void) doSomething:(NSString *[static 10]) arg
{

}

如果不是,您必须将其作为两个单独的参数传递。一个作为指向它的第一个元素的指针,第二个作为它的长度:

-(void) doSomething:(NSString **) arg count:(size_t) count
{

}

现在您可以像访问您可能拥有的任何其他数组一样访问您的变量。

因为您正在处理一个由objective-c 对象组成的C 数组,所以您实际上可以使用NSArray 的内置构造函数将C 数组转换为NSArray

NSArray *result = [NSArray arrayWithObjects:arg count:count];

【讨论】:

  • 如何计算数组大小?我不知道要传递给 count 参数的值...
  • 但是这种方法用于不同大小的数组。如何在 C 中获取数组长度?
  • C 实际上没有数组类型,它有指针类型。因此,如何确定大小将取决于您正在与之交互的代码。要么是零终止(常见于指针数组),另一个信号量(-1 常见于人们期望内容为 0 或更大的数组)或计数(最常见的方法)。
  • NSArray *result = [NSArray arrayWithObjects:arg count:count];,其中arg是c数组?
猜你喜欢
  • 2018-11-14
  • 2013-06-26
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多