簡體   English   中英

將字符串從 C++ 轉換為 Swift

[英]Converting string from C++ to Swift

我正在嘗試在 Swift 中使用 C++ 函數。 為此,我使用 Objective-C 包裝器。 我對 Objective-C 和 C++ 不太熟悉。

我的包裝器 function 將 Swift 字符串作為來自 textField 的參數。 在 c++ 內部,我加密傳遞的字符串並返回它。

這是我的 Cpp function:

string StringModifier::encryptString(string str) {
    int i;
    for(i=0; (i<100 && str[i] != '\n'); i++) {
        str[i] = str[i] + 2;
    }
    return str;
}

在 Wrapper 內部

StringModifier stringModifier;

-(NSString*)encryptString:(NSString*)str; {
    string strng = [str UTF8String];
    string finalString = stringModifier.encryptString(strng);
    NSString *result = [NSString stringWithCString: finalString.c_str() encoding:[NSString defaultCStringEncoding]];
    return result;
    
}

encryptString("Helloworld") 的 output 是 "Jgnnqyqtnf¬√√0*?" 幾次調用此方法后會引發 EXC_BAD_ACCESS 錯誤。

我怎么解決這個問題?

謝謝。

您需要檢查 C++ 中的 null 字符 ( \0 )。

將您的 for 循環更改為:

for(i=0; (i<100 && str[i] != '\n' && str[i] != '\0'); i++) {
    str[i] = str[i] + 2;
}

更好的是,根據字符串的大小循環:

string StringModifier::encryptString(string str) {
    for (int i = 0; i < str.size() && str[i] != '\n'; i++) {
        str[i] = str[i] + 2;
    }
    return str;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM