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

Converting string from C++ to Swift

提问人:Can Yoldas 提问时间:12/5/2021 最后编辑:Peter MortensenCan Yoldas 更新时间:12/5/2021 访问量:275

问:

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

我的包装函数将 Swift String 作为 textField 的参数。在 C++ 中,我加密传递的字符串并返回它。

这是我的 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 Swift NSScrit Objective-C++

评论

0赞 George 12/5/2021
你能在for循环条件下尝试吗?i<100 && str[i] != '\n' && str[i] != '\0'
0赞 Can Yoldas 12/5/2021
这实际上解决了我的问题。从没想过这是CPP方面的问题。非常感谢。
0赞 George 12/5/2021
为它添加了一个答案:)

答:

1赞 George 12/5/2021 #1

您需要检查 C++ 中的空字符 ()。\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;
}