我想从NSString获得一个cString
所以我们使用了c String Using Encoding:方法
但是,不保证c String Using Encoding:方法的返回值
(Apple的文档:返回的C字符串保证只有在接收者被释放之前才有效。)
所以Apple推荐使用get CString:max Length:encoding:方法
我想将确切的长度传递给maxLength。
示例1)
NSString *tmp = @"中日韓" // cString 9bytes
char *buffer = new tmp[9 + 1];
[tmp getCString:buffer maxLength:9+1 encoding:NSUTF8StringEncoding];
示例2)
NSString *tmp = @"中日韓123" // cString 12bytes
char *buffer = new tmp[12 + 1];
[tmp getCString:buffer maxLength:12+1 encoding:NSUTF8StringEncoding];
有没有办法知道上面例子中9和12的长度?
答案 0 :(得分:4)
// Add one because this doesn't include the NULL
NSUInteger maxLength = [string maximumLengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1;
答案 1 :(得分:3)
您可以使用cStringUsingEncoding
来获取长度。如果您需要生成的char *
超过tmp
,那么只需复制C字符串:
NSString *tmp = @"中日韓" // cString 9bytes
const char *cStr = [tmp cStringUsingEncoding:NSUTF8StringEncoding];
size_t len = strlen(cStr);
char *buffer = new tmp[len + 1];
strcpy(buffer, cStr);