Почему я получаю: возвращая const char * из функции с типом результата char * отбрасывает квалификаторы - PullRequest
2 голосов
/ 23 декабря 2011

Мне нужно вернуть NSString как char *:

char *inboxPath (void) 
{ 
    NSURL * url = [[[[NSFileManager defaultManager] 
                 URLsForDirectory:NSDocumentDirectory 
                 inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"inbox.txt"];
    return [[NSString stringWithFormat:@"%@", url] UTF8String]; 
}

Я получаю: Возвращая 'const char *' из функции с типом результата 'char *' отбрасывает квалификаторы

Почему я это понимаю и как я могу это решить?
Очевидно, я мало знаю C, есть ли более простой способ сделать это?

Ответы [ 2 ]

6 голосов
/ 23 декабря 2011

Функция:

char* inboxPath (void);

возвращает char*, а -[NSString UTF8String] возвращает const char*.Отбрасываемый вами квалификатор const.Чтобы решить эту проблему, вы должны объявить свою функцию:

const char* inboxPath (void);

Мутирование неизменяемых (const) данных - один из распространенных способов введения неопределенного поведения, поэтому вам определенно следует избегать удаления квалификатора const.1013 *

Если вам нужен изменяемый буфер char, скопируйте строку utf8, возвращаемую -[NSString UTF8String].

3 голосов
/ 23 декабря 2011

Добавьте спецификатор к типу возвращаемого значения в вашей функции:

const char *inboxPath(...)

UTF8String возвращает const char *, поэтому вы можете захотеть вернуть тот же тип в вашей функции.

...