Вызов функции C из Objective-C со строковым массивом - PullRequest
1 голос
/ 16 июля 2011

Я пытаюсь вызвать простую учебную функцию C из Objective-C и не могу понять, как разделить передаваемые аргументы, а это две строки.

int cFunction(int argc, char **argv)
{
    int i;
    printf("argc = %d\n", argc);
    for (i = 0; i < argc; i++) {
        printf("argv[%d] = \"%s\"\n", i, argv[i]);
    }
    return 0;
}

Я пробовал cFunction(3, "string1 string2"), cFunction(3, "string1", "string2") и cFunction(3, args), с args как NSArray, состоящим из [textField1 stringValue] и [textField2 stringValue]

Я получаю EXC_BAD_ACCESS при попытке printf argv[i]. Я также попытался передать 2 в качестве значения argc.

Как это должно называться? Спасибо

1 Ответ

3 голосов
/ 16 июля 2011

В этом списке параметров функции argv - указатель на массив строк C (char **).

Использование типа Objective-C NSString или NSArray невозможно с этой функцией. Сначала преобразуйте каждую строку, используя -(const char *)cStringUsingEncoding:(NSStringEncoding)encoding;, и сохраните ее в массив строк C.

// myString is "arg1"
// mySecondString is "arg2"
char *cString = [myString
                 cStringUsingEncoding:NSUTF8StringEncoding];
char *cSecondString = [mySecondString
                       cStringUsingEncoding:NSUTF8StringEncoding];
char *myStrings[2] = { cString, cSecondString };
int returnCode = cFunction(2, myStrings);

Это должно сработать.

...