2013-05-28 50 views
2

我找到了一種將字符串設置爲char數組的方法。我使用下面的代碼:非const字符串的UTF8String

NSString *string = [[NSString alloc] initWithFormat:@"This is a string!"]; 
char *c = [string UTF8String]; 

不過,我得到了警告,「初始化‘字符’與爲一個函數型‘爲const char’丟棄預選賽

它工作正常,但我的感覺。有沒有人有任何建議?

+0

可能重複的[初始化炭\ *與類型爲const char的表達式](http://stackoverflow.com/questions/9976810/initializing-char-with-an-expression-of-type-const -char)。換句話說:當你像這樣去除const限定符時,編譯器不喜歡它 – CodaFi

回答

3

[NSString UTF8String]返回的值是一個指向一個常量字符數組的指針,你不能刪除「 const「。

如果您想要一個非常量的字符數組,您必須使用方法strcpy(...)複製該字符串。您必須聲明並初始化字符數組,然後複製裏面的定字符串的值:

NSString *string = @"This is a string"; 
char cString [string.length] 
strcpy(cString, string.UTF8String); 
NSLog(@"Copied String: %s", cString); 

,或者如果您希望自己管理內存:

NSString *string = @"This is a string"; 
char * cString = malloc(sizeof(char)*string.length); 
strcpy(cString, string.UTF8String); 
NSLog(@"Copied String: %s", cString); 
free(cString); 
0

都使用const char和你也可以使用不同類型的編碼:

const char * c = [string cStringUsingEncoding:NSUTF8StringEncoding];

0

NSFileManager * fileMgr = [NSFileManager defaultManager];的

if (![fileMgr fileExistsAtPath:pathOfDB]) { 

    const char *pathDB = [pathOfDB UTF8String]; 
+0

歡迎來到StackOverflow,請給出關於爲什麼這個答案有用的更多細節。你可以參考:http://stackoverflow.com/help/how-to-answer – echonax