提问人:Can Yoldas 提问时间:12/5/2021 最后编辑:Peter MortensenCan Yoldas 更新时间:12/5/2021 访问量:275
将字符串从 C++ 转换为 Swift
Converting string from C++ to Swift
问:
我正在尝试在 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错误。
我该如何解决这个问题?
答:
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;
}
上一个:十进制到uint8_t数组
评论
i<100 && str[i] != '\n' && str[i] != '\0'