Кажется, что 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;
}