characterAtIndex返回错误值

时间:2009-10-04 03:01:10

标签: objective-c

我从iPhone SDK中的Object-C的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];   
 } 

我正在尝试获取单个字符的十进制数。我每次都得到错误的价值。有时价值大于8,000!我应该回到65到71号。

2 个答案:

答案 0 :(得分:1)

当您向new_text发送stringByAppendingFormat时,

new_text为零。向nil对象发送消息是合法的 - 它什么都不做。因此,// 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]; 永远不会被初始化,因此是奇怪的值。

如果new_text是初始化的NSMutableString,那么你的代码就可以了:

{{1}}

答案 1 :(得分:1)

new_text是一个局部变量,它不是初始化的,你在为它赋值之前向它发送一条消息。与新分配的Objective-C对象不同,局部变量值不会自动归零,因此new_text的指针值是在方法执行之前发生的内存位置。换句话说,你的new_text指针指向一个非确定性的内存位置,因此这里的行为是未定义和不可预测的。通常你最终会崩溃,但是你只是指着看起来像字符串的东西,但是那个字符串的内容也是非确定性的。因此奇怪的字符值。

n.b。这是一个很好的例子,说明在声明局部变量时始终初始化局部变量的好习惯。