/*nsstring->char*/
NSString* str = @"hello world";
char cha[20];
memcpy(cha, [str cStringUsingEncoding:NSUTF8StringEncoding], 2 * [str length]);
/*nsstring->char**/
const char* cc = [str UTF8String];
/*char*->nsstring*/
NSString* str1 = [NSString stringWithCString:cc encoding:NSUTF8StringEncoding];
NSLog(@"%@",str1);
/*NSMutableString->nsstring*/
NSMutableString* SN = [[NSMutableString alloc]initWithCapacity:20];
[SN appendString:@"hello"];
const char* dd = [SN UTF8String];
总结:
1,nsstring的地址随着值的变化而变化,而nsmutablestring的地址不变。原因可能是nssring指向了静态存储区的内容,而nsmutablestring在堆里有自己真正的空间。
2,cha[20]虽然只有前11个字符有效,12个为/0,但后面依然有内容。原因是因为memcpy不管是否遇到/0,都复制内存,与strcpy不一样。
以上都是个人理解,如有不正确的,还望指点。