如何从Objective-C将字符串传递给C函数并获取值?

时间:2010-10-15 13:10:39

标签: iphone objective-c c

我有一个Objective-C视图控制器类,我试图从中调用直接C(非Objective-C)函数。我想通过引用传入一个字符串变量,在C函数中设置它的值,然后在我的视图控制器中我想将它转换为普通的NSString对象。

由于我无法直接传入NSString对象,我需要创建并传入char指针或char数组,然后在函数之后将其转换为NSString对象回报。

有人能指出一个简单的代码示例,说明如何执行此操作吗?我在Objective-C或常规C中都不强,所以操纵字符串对我来说非常困难。

4 个答案:

答案 0 :(得分:6)

也许是这样的

bool doSomethingToMyString(const char* originalString, char *buffer, unsigned int size)
{
    bool result = 0;
    if (size >= size_needed)
    {
        sprintf(buffer, "The new content for the string, maybe dependent on the originalString.");
        result = 1;
    }
    return result;
}

...
- (void) objectiveCFunctionOrSomething:(NSString *)originalString
{
    char myString[SIZE];
    if (doSomethingToMyString([originalString UTF8String], myString, SIZE))
    {
        NSString *myNSString = [NSString stringWithCString:myString encoding:NSUTF8StringEncoding];
        // alright!
    }
}

或者,你知道,那是什么意思。

答案 1 :(得分:1)

NSString文档中查看以下内容:

– cStringUsingEncoding:
– getCString:maxLength:encoding:
– UTF8String
+ stringWithCString:encoding:

答案 2 :(得分:0)

嗯,我得到了它的工作。这是我的C函数:

int testPassingChar(char buffer[]) {    
    strcpy(buffer, "ABCDEFGHIJ");
    return 0;
}

然后从Objective-C:

char test[10];
int i;
i = testPassingChar(test);
NSString* str = [[NSString alloc] initWithBytes:test length:sizeof(test) 
    encoding:NSASCIIStringEncoding];

答案 3 :(得分:0)

为什么不在Objective-C中包装C函数?

-(NSString*)testPassingCharWithStringLength:(int)whateverLength {
     char *test = malloc(sizeof(char) * whateverLength);  
     //do whatever you need to *test here in C
     NSString *returnString = [NSString stringWithUTF8String:test];
     free(test);
     return returnString;
}

...例如......