将std :: string转换为nsstring问题

时间:2011-03-28 08:18:05

标签: c++ objective-c

您好 我使用以下命令将std::string转换为NSString,但在尝试显示nsstring的值时返回(null)

我需要它在转换时返回而不是(null)为空任何建议

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

任何避免空值的建议

最好的问候

2 个答案:

答案 0 :(得分:8)

编辑语法@"string"仅用于 来构建NSString。使用std::string时,您应该使用标准的"string"语法。

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

    从iPhone SDK的早期开始就是
  1. +stringWithCString:length: has been deprecated。如果字符串仅包含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*。我们需要更多的上下文(代码)才能看到发生了什么。)

答案 1 :(得分: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 sdk 4.3 btw中完成的,所以我不确定如果你在其他地方把它编辑就会改变编码。