-(void)myStartMethod{
NSString *str = @"testing";
char *charStr = [str UTF8String];
charStr[4] = '\0'; // bad access on this line.
NSLog(@"%s",charStr);
}
我正在尝试终止第四个字符串上的字符串并将输出打印为" test"。 我错过了什么?
由于C
编程可以与Objective-c(foundation framework)
一起使用,因此它会导致错误访问。这种类型的char数组修改在C (GCC)
中完全有效。
我怎样才能避免它背后的原因。 提前谢谢。
答案 0 :(得分:2)
The documentation州提供了相当不错的提示:
<强> UTF8字符串强>
返回接收器的以null结尾的UTF8表示。
- (const char *)UTF8String
所以,很明显你修改它是错误的。事实上,您应该收到将const char *
转换为普通char *
的警告。
此外,'\0'
字符的名称不是NULL
,用于指针。
答案 1 :(得分:1)
Apple标题[str UTF8String]
返回const char*
,无法修改。
答案 2 :(得分:1)
正如其他答案所提到的,您无法修改从NSString
实例返回的UTF-8字符串。
而是使用此代码:
-(void)myStartMethod{
NSString *str = @"testing";
NSString *part = [str substringWithRange:NSMakeRange(0, 4)];
char *charStr = [part UTF8String];
NSLog(@"%s",charStr);
}
或:
-(void)myStartMethod{
NSString *str = @"testing";
NSString *part = [str substringWithRange:NSMakeRange(0, 4)];
NSLog(@"%@", part);
}