Objective-c填充数组,字符范围从“A”到“Я”

Objective-c填充数组,字符范围从“A”到“Я”,objective-c,arrays,loops,pointers,char,Objective C,Arrays,Loops,Pointers,Char,该代码将所有元件的名称设置为Я,而不是从А到Я的范围: for(int i=0; i<NEURONS_COUNT; i++) { char sym = (char)(128+i); NSString* name = [NSString stringWithFormat:@"%s", &sym]; name = [name substringToIndex:MIN(1, [name length])]; neurons[i] = [[Neuron al

该代码将所有元件的名称设置为Я,而不是从А到Я的范围:

for(int i=0; i<NEURONS_COUNT; i++) {
    char sym = (char)(128+i);
    NSString* name = [NSString stringWithFormat:@"%s", &sym];
    name = [name substringToIndex:MIN(1, [name length])];
    neurons[i] = [[Neuron alloc] init];
    [neurons[i] setName:name];
}
for(int i=0; i<NEURONS_COUNT; i++) {
    NSLog(@"%@", [neurons[i] getName]);
}
为什么??如何用到的值填充名称?您创建的名称字符串不正确。您确实会将指向char的指针传递给字符串格式说明符,该说明符不是以NULL结尾的,这就是为什么要对substringToIndex执行一些魔术

你应该换台词

char sym = (char)(128+i);
NSString* name = [NSString stringWithFormat:@"%s", &sym];
name = [name substringToIndex:MIN(1, [name length])];


如果使用%c,则会导致字符集出现问题。我得到的是“?”而不是字母。但是,如果我使用格式%s,我得到了字母,但最后带有“\0”,则需要使用子字符串来删除“\0”。似乎您正在尝试获取西里尔字母表,我已经更新了答案[neurons setName:]的实现是什么,是合成了默认的还是您覆盖了它?是的,它被覆盖了。刚做了属性和合成。问题解决了。谢谢
unichar sym = (0x0410+i);
NSString* name = [NSString stringWithCharacters:&sym length:1];