提问人:ahSatan 提问时间:7/3/2022 最后编辑:ahSatan 更新时间:7/4/2022 访问量:76
执行字符串的深度复制以传递到扫描仪的最简单方法?
Easiest way to perform a deep copy of a string to pass to a scanner?
问:
我遵循此处显示的代码:将十六进制字符串转换为长整形以从字符串中读取长整型。在他们的示例中,他们有一个硬编码的字符串,但在我自己的上下文中,我有另一个值,我正在从中获取字符串,该值似乎发生了变化,但我认为它不应该改变。我想在开始时保留正在读取的值,因此将字符串的深层副本传递给扫描程序。
我知道 [string copy] 和 [string mutableCopy] 提供了一个浅拷贝,而在 NSString 中,副本不复制? 问题 我们指出 NSString 应该是不可变的,因此它发生变化的场景也是它的指针发生变化时。但是,我想知道使用扫描仪是否会导致此前提出现问题?我能完全错误地理解这里的问题吗?我不认为原始字符串甚至不应该改变,但在调试器中,它在几行后就发生了变化。
1 NSString* pString = someIdentifier;
2
3 unsigned long long val;
4 NSScanner* scanner = [NSScanner scannerWithString: pString];
5 [scanner scanHexLongLong: &val];
6
Debug breakpoints
1 pString = @"0x12345"
4 pString = @"9876543" (not exactly a hex string)
val = "74576" (some decimal close to, but not the same as the original pString)
scanner = 0x12b45 (same a pString with 1 bit different)
5 scanner = previous pString
6 pString = 0xFFFFF
val = 0xFFFFF ( in decimal)
答: 暂无答案
评论
[pScanner scanHexLongLong: &val]
pScanner
NSString
NSString *