sysctlbyname для kern.osrelease возвращает NULL - PullRequest
0 голосов
/ 01 марта 2020

Вот мой код, и я пытаюсь получить OSVersion здесь на IOS устройствах. И это предупреждение в строке return ret; ----> Несовместимое целочисленное преобразование в указатель, возвращающее 'char' из функции с типом результата 'char *'; взять адрес с &. Когда я переключаю ret на ret, он все равно не работает.

char *getOSVersion() {
        char str[256];
        size_t size = sizeof(str);
        char ret = sysctlbyname("kern.osrelease", str, &size, NULL, 0);
        return ret;
    }

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

В опубликованном вами коде вы возвращаете результат вызова sysctl (код ошибки) вместо фактической возвращаемой им строки.

Возможно, вы имели в виду return str; в последней строке?

0 голосов
/ 01 марта 2020

Кажется, что sysctlbyname возвращает целочисленное значение, и вы пытаетесь вернуть локально созданный указатель на символ из вашей функции. Я думаю, что вы должны либо взять указатель char в качестве параметра и назначить его в теле функции, либо вы должны вернуть char по значению. Попробуйте использовать таким образом;

char getOSVersion() {
    char str[256];
    size_t size = sizeof(str);
    char ret = (char)sysctlbyname("kern.osrelease", str, &size, NULL, 0);
    return ret;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...