2009-10-04 148 views
0

我收到了iPhone SDK中的Object-C的characterAtIndex方法返回的一些奇怪的数字。代码片段如下:characterAtIndex返回错误的值

NSString *new_text; 
new_text = [new_text stringByAppendingFormat:@"%@",UITextView_1.text];//=a,b,...f 

for(int i = 0; i <= 6; i++) 
{ 
    char_num = [new_text characterAtIndex:i]; 
} 

我想获取单个字符的十进制数。我每次都得到错误的值。有时价值超过8000!我应该回到65到71的数字。

回答

1

新文本是一个局部变量,它不是initalized,你给它分配一个值之前将消息发送到它。与新分配的Objective-C对象不同,局部变量值不会自动为零,因此new_text的指针值就是在方法执行之前发生的那个内存位置。换句话说,你的new_text指针指向一个非确定性的内存位置,因此这里的行为是不确定的,不可预知的。通常你最终会崩溃,但绝对有可能你指向的东西看起来像一个字符串,但该字符串的内容也是非确定性的。因此怪异的字符值。

n.b.这是一个很好的例子,说明为什么在声明时始终初始化局部变量是一种很好的做法。

1

new_text是零当你发送stringByAppendingFormat到它。将消息发送给一个零对象是合法的 - 它什么也不做。因此new_text从不初始化,因此怪异的值。

如果新文本是一个初始化的NSMutableString你的代码将是确定的:

// stringByAppendingFormat is an instance method and must be called on a non-nil instance 
NSMutableString* text = [NSMutableString string]; 
text = [text stringByAppendingFormat:@"%@",UITextView_1.text]; 

// stringWithFormat is a class method and can be used to initialize an instance 
NSString* text = [NSString stringWithFormat:@"%@",UITextView_1.text]; 
+0

但我想获得每个字符的十进制值(A = 65,B = 66等)。这些字符串方法将如何将这些值返回给我? – 2009-10-04 03:19:05

+0

字符串方法只是制作字符串。 characterAtIndex是什么让你的价值。尝试NSLog(@“%d”,[@“A”characterAtIndex:0]); – nall 2009-10-04 03:26:53

+0

NSLog似乎对字符串中的前两个字符起作用。第三个字符返回8656的值。它能返回一个地址而不是十进制值吗? – 2009-10-04 03:41:18