Как я могу передать строку в функцию C из Objective-C и получить значение обратно? - PullRequest
1 голос
/ 15 октября 2010

У меня есть класс контроллера представления Objective C, из которого я пытаюсь вызвать функцию прямого C (не Objective C).Я хочу передать строковую переменную по ссылке, установить ее значение внутри функции C, а затем снова в своем контроллере представления. Я хочу преобразовать это в обычный объект NSString.

Так как я не могу передать внепосредственно для объекта NSString, мне нужно создать и передать либо указатель char, либо массив char, а затем преобразовать его в объект NSString после возврата из функции.

Может кто-нибудь указать мне напростой пример кода, который показывает, как это сделать?Я не силен ни в Objective-C, ни в обычном C, поэтому мне очень трудно манипулировать строками.

Ответы [ 4 ]

6 голосов
/ 15 октября 2010

Может быть, что-то вроде этого

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 голос
/ 15 октября 2010

Проверьте следующее в NSString документах:

– cStringUsingEncoding:
– getCString:maxLength:encoding:
– UTF8String
+ stringWithCString:encoding:
0 голосов
/ 17 октября 2010

Почему бы вам не обернуть свою функцию C в Objective-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;
}

... например ...

0 голосов
/ 15 октября 2010

Ну, я получил его на работу.Вот моя функция 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];
...