为什么我得到:从结果类型为char *的函数返回const char *丢弃限定符

时间:2011-12-23 16:34:02

标签: objective-c c nsstring char

我需要返回NSString作为char *

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

我得到:从结果类型为'char *'的函数返回'const char *'会丢弃限定符

为什么我得到这个以及如何解决它? 显然我不太了解C,有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:6)

功能:

char* inboxPath (void);

返回char*-[NSString UTF8String]返回const char*。您要删除的限定符是const。要解决这个问题,你应该声明你的功能:

const char* inboxPath (void);

变换不可变(const)数据是引入未定义行为的一种常见方式,因此您肯定希望避免丢弃const限定符。

如果您需要一个可变的char缓冲区,请复制-[NSString UTF8String]返回的utf8字符串。

答案 1 :(得分:3)

将限定符添加到函数中的返回值类型:

const char *inboxPath(...)

UTF8String会返回const char *,因此您可能希望在函数中返回相同的类型。