将字符串从 C++ 转换为 Swift

Converting string from C++ to Swift

我正在尝试在 Swift 中使用 C++ 函数。为此,我使用了 Objective-C 包装器。我对Objective-C和C++不是很熟悉

我的 wrapper 函数将 Swift 字符串作为来自 textField 的参数。在 C++ 内部,我加密传递的字符串并 return 它。

这是我的 C++ 函数:

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

包装纸内部:

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") 的输出是"Jgnnqyqtnf¬√√0*?" 在调用此方法几次后,它会抛出 EXC_BAD_ACCESS 错误。

我该如何解决这个问题?

您需要检查 C++ 中的空字符 ([=12=])。

将您的 for 循环更改为:

for(i=0; (i<100 && str[i] != '\n' && str[i] != '[=10=]'); 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;
}