NSString getCString不会填充数组

时间:2015-04-15 20:51:11

标签: ios objective-c

我正在尝试使用以下代码将NSString转换为char*

char *key = (char*) calloc(kCCKeySizeAES128 + 1, sizeof(char));
[keyString getCString:key maxLength:(kCCKeySizeAES128 + 1) encoding:NSUTF8StringEncoding];
char* cstring = [keyString cStringUsingEncoding:NSUTF8StringEncoding];
int i;
for (i = 0; i < (kCCKeySizeAES128 + 1); ++i)
{
  NSLog(@"MDO::key[%d] = %d", i, (int)key[i]);
  NSLog(@"MDO::cstring[%d] = %d", i, (int)cstring[i]);
}

但是,当我运行它时,key数组的内容全部为0,而cstring包含正确的值。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我对maxLength参数的解释方式错了。我认为这意味着“无论原始字符串有多长,都将”最多maxLength个字符复制到数组中。“那是错的。 keyString超过kCCKeySizeAES128 + 1,因此该方法返回NOkey数组仍然归零。解决方案是使用与原始字符串长度匹配的maxLength