Objective c characterAtIndex返回错误值

Objective c characterAtIndex返回错误值,objective-c,Objective C,我从iphonesdk中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];

我从iphonesdk中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];   
 } 
NSString*新文本;
new_text=[new_text stringByAppendingFormat:@“%@”,UITextView_1.text]//=a、 b,…f

for(int i=0;i
new\u text
在通过附加格式发送
stringByAppendingFormat
时为nil。向nil对象发送消息是合法的,它什么也不做。因此
new\u 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];

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


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

但我正在尝试获取每个字符的十进制值(a=65、b=66等)。这些字符串方法将如何返回这些值?字符串方法仅生成字符串。characterAtIndex是获取这些值的方法。请尝试NSLog(@“%d”,[@“A”characterAtIndex:0]);NSLog似乎可以处理字符串中的前两个字符。第三个字符返回的值为8656。它可能返回的是地址而不是十进制值吗?我已尝试为我正在执行的操作添加更多细节。NSInteger char_num;NSString*new_text;new_text=[new_text stringByAppendingFormat:@“%@”,UITextView_1.text];对于(int i=0;i)您仍然通过将格式附加到nil字符串来发送字符串。将此更改为:NSString*new_text=[NSString stringWithString:UITextView_1.text];更好的是,只需在UITextView_1.text上迭代即可。