char return_string[250];
int num_hosts;
if ((num_hosts = hci_scan((char **) & return_string, 0x03)) > 0) {
    //case where one or more devices are found...
} else {
    //case where zero devices are found...
}
Hm, what's the signature of hci_scan()? I mean what does it return? Even if you don't have access to the hci_scan() definition, you would still have the signature, assuming it's part of a third party api. 
Looks like hci_scan() expects a pointer to a pointer so that it can allocate its own memory and return back the pointer. If that's indeed the case, you can do
char * return_string; /* No memory allocation for string */
int num_hosts;
if ((num_hosts = hci_scan(&return_string, 0x03)) > 0) { /* get back pointer to allocated memory */
    //case where one or more devices are found...
} else {
    //case where zero devices are found...
}
But then again it depends on what hci_scan is trying to do.