2010-12-06 193 views
14

我尝试将nsstring转换为const char *。nsstring和const char *转换

1 - 我加的NSString和整数一起
2 - 然后我这个新的NSString转换为const char *
3-我有一个对象,我认为这新的NSString因为我的对象的名称。
4-我使用此对象在另一个函数

的NSString *的firstName = [NSString的stringWithFormat:@ “名称%d”,1];
const char * secondName = [firstName cString];
myobject-> setName(secondName);

问题:一个
1 secondName为空时,我用我的对象在我的功能。
2-但如果我通过替换firstName:firstName =“Name1”;
3-它工作

问题乙
1-如果我替换常量字符* secondName = [名字CSTRING];
by const char * secondName = [macString UTF8String];即使我有firstName =“Name1”;
3-这不工作!

任何想法?

谢谢

:=)

回答

15

为const char *是常数,你就无论如何也不能为它们分配!

尝试通过(const char*)[firstName UTF8String]你的方法

58

使用从NSString类cStringUsingEncoding:

NSString *myString = @"Hello"; 
const char *cString = [myString cStringUsingEncoding:NSASCIIStringEncoding]; 
+4

注重在文档中的以下部分如果使用NSASCIIStringEncoding或类似的话:_如果接收者不能b则返回NULL e无损地转换为encoding_ – V1ru8 2013-05-02 14:46:25

+0

all(null)(null) – Gank 2015-02-07 03:32:42

3
NSString* firstName = [NSString stringWithFormat: @"Name%d", 1]; 

const char* secondName = [firstName UTF8String]; 

UTF8String returns a const char: - (const char *)UTF8String 
0

使用此方法:

char* MakeStringCopy (const char* string) 
{ 
    if (string == NULL) 
     return NULL; 

    char* res = (char*)malloc(strlen(string) + 1); 
    strcpy(res, string); 
    return res; 
} 

NSString *filePath = @"~/Documents/Image.png"; 
MakeStringCopy([filePath UTF8String]);