2011-12-23 3 views
2

мне нужно те возвращающие NSString, как char *:Почему я получаю: возвращение константный символ * из функции с типом результата полукокса * Отбрасывает отборочные

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

я получаю: вернувшиеся «константный символ *» из функции с результатом тип «char *» отбрасывает квалификаторы

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

ответ

6

Функция:

char* inboxPath (void); 

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

const char* inboxPath (void); 

Меняющегося постоянство данных (const) является одним распространенным способом ввести неопределенное поведение, так что вы определенно хотите, чтобы не уронить const спецификатора.

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

+1

Примечание: «Возвращенная строка C представляет собой указатель на структуру внутри строкового объекта, которая может иметь срок службы короче, чем строковый объект, и, конечно же, не будет иметь более длительного срока службы. Поэтому вам следует скопировать строку C, если она должна храниться вне контекста памяти, в которой вы вызывали этот метод. »- [NSString] (https://developer.apple.com/library/mac/documentation/Cocoa/ Ссылка/Foundation/Классы/NSString_Class/Справка/NSString.html # // apple_ref/DOC/UID/20000154-CJBHCCED) –

3

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

const char *inboxPath(...) 

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

Смежные вопросы