我收到以下代码的NSCFString:
NSString *urlString;
/* leak showing below line */
urlString = [urlString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
你如何解决这个漏洞?
答案 0 :(得分:1)
您应该进行字符串的指针分配而不是静态分配。变化:
NSString urlString;
为:
NSString *urlString;
此外,似乎还有一些其他代码会将urlString
启动到您正在执行替换操作的某个值。
答案 1 :(得分:0)
您最有可能使用+alloc/initWith...
创建了urlString。如果是这种情况,那么您拥有urlString
引用,并负责在某个时候释放它。但是,当您到达问题中粘贴的行时,您将使用新的字符串引用覆盖urlString
引用,因为stringByReplacingOccurrencesOfString:withString:
返回一个新的字符串对象(即,它不会修改字符串就位。)
我的建议是使用NSMutableString
代替,这确实允许就地字符串操作。
答案 2 :(得分:0)
它来自我的一个代码是你想要的所有,我替换为空格但你可以替换为空字符串(@“”)
NSString * str_aLine;
str_aLine = @"sometext \n and \t and on";
// replace tabs to space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\t" withString:@" "];
// replace \n to space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
// replace \r to space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\r" withString:@" "];
// reduce spaces to one space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@" +" withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, str_aLine.length)];
// trim begin and end from white spaces
str_aLine = [str_aLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];