2011-03-28 124 views
1

嗨 我使用以下方法来std::string转换成的NSString,但它返回(空),同时试图显示的NSString转换的std :: string到的NSString问题

我需要它返回的,而不是值(NULL )在转换时间清空任何建议

StudyDate=[NSString stringWithCString:studyDate length:strlen(studyDate)]; 

任何建议,以避免空值

问候

+2

顺便说一句,它不是一个好主意,让变量只有他们的情况('StudyDate'与'studyDate')不同。 – DarkDust 2011-03-28 08:27:27

回答

8

编辑:使用语法@"string"只有用于构建NSString。使用std::string您应该使用标准"string"语法。

NSString* aConstantNSString = @"foo"; 
const char* aConstantCString = "foo"; 
std::string aConstantStdString = "foo"; 
CFStringRef aConstantCFString = CFSTR("foo"); 

  1. +stringWithCString:length: has been deprecated自iPhone SDK的早期开始。如果字符串只包含ASCII字符,通常可以使用use +stringWithUTF8String: instead

  2. 只有当studyDate是C字符​​串(即const char*)时,您的方法才有效,但您说有std::string。没有方法可以将std::string直接转换为NSString。您必须使用.c_str()创建C字符串第一:

    StudyDate = [NSString stringWithUTF8String:studyDate.c_str()]; 
    

    (但上面不应该是你得到(null)因为通过事业std::string+stringWithCString:length:甚至strlen应立即给予编译时错误。

    'error: cannot convert ‘std::string’ to ‘const char*’ in argument passing' 
    

    所以studyDate应该已经是一个const char*。我们需要更多的上下文(代码),看看发生了什么事情。)

+0

我做了c_str,但存在相同的错误 – Ali 2011-03-28 08:30:48

+0

@Ali:显示如何获得'studyDate',以及如何打印'StudyDate'。 – kennytm 2011-03-28 08:32:27

+0

std :: string studyDate = @“test”; StudyDate = [NSString stringWithUTF8String:studyDate.c_str()]; nslog(StudyDate); – Ali 2011-03-28 08:49:10

1
NSString objCString = @"this is my objective c string"; 
std::string cppString; // this is your c++ string or however you declared it blah blah blah 

cppString = [objCString UTF8String];  
// this is the conversion of an NSString into a c++ string 
// not sure if it will work for c strings but you can certainly try 

这就是所有有太多的恐惧。所有你需要的只是一行代码。这是在iOS 4.3 SDK中完成的,所以我不确定编码是否会改变,如果你在其他地方添加它。

+0

你已经表明了他所要求的相反。他要求将std :: string转换为NSString,而不是将NSString转换为std :: string。 – Volomike 2016-02-03 19:57:40