我需要返回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,有没有更简单的方法呢?
答案 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 *
,因此您可能希望在函数中返回相同的类型。