2011-03-28 122 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