这个是我进行TCP通讯时的一个非常简单的加密函数,参数1是加密的数据(待解密的数据),参数2是加密的代码 -(NSString *)Decryption : (NSString*)strData : (int)nCode { if(strData == nil || [strData isEqual: @""]) return @""; NSString* strResult = @""; unichar* szArray = malloc(sizeof(strData.length + 1)); int nCount = (int)strData.length; for(int i=0;i < nCount; ++i){ szArray[i] = [strData characterAtIndex:i] ^ nCode; } szArray[nCount] = ""\0""; // strResult = [strResult stringByAppendingFormat:@"%s", szArray]; strResult=[NSString stringWithCharacters:szArray length:nCount]; // free(szArray); return strResult; } |
|
60分 |
free还是要打开,不能注释。
sizeof用错了,NSString的length方法返回NSUInteger,在5s下malloc每次都是固定分配9个字节,4s下固定分配5个字节,那么这个szArray在下面循环的时候,几乎必然越界,你应该这么写:malloc(sizeof(unichar) * (strData.length + 1)) |
谢谢,确实,因为本来是直接用unichar * strData.length的方法,可能是以前VC做习惯了,直接有错误……
|