我正在嘗試在 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 錯誤。
我怎么解決這個問題?
uj5u.com熱心網友回復:
您需要\0在 C 中檢查空字符 ( )。
將您的 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373018.html
