Ios substringWithRange适用于硬编码字符串,但不适用于用户输入字符串

Ios substringWithRange适用于硬编码字符串,但不适用于用户输入字符串,ios,objective-c,nsstring,nsrange,Ios,Objective C,Nsstring,Nsrange,当我硬编码有问题的字符串并尝试使用range子字符串时,它工作得很好。但当我将用户输入作为char并将其转换为NSString时,它会引发NSRange异常。是因为我在施法吗 这不起作用: char word[30]; NSString *otherWord = [NSString stringWithFormat:@"%s", word]; scanf("%s", word); NSString *firstCharacter = [otherWord subs

当我硬编码有问题的字符串并尝试使用range子字符串时,它工作得很好。但当我将用户输入作为char并将其转换为NSString时,它会引发NSRange异常。是因为我在施法吗

这不起作用:

    char word[30];
    NSString *otherWord = [NSString stringWithFormat:@"%s", word];
    scanf("%s", word);
    NSString *firstCharacter = [otherWord substringWithRange:NSMakeRange(0, 3)];
然而,这一点:

    char word[30];
    NSString *otherWord = @"SomeString";
    scanf("%s", word);
    NSString *firstCharacter = [otherWord substringWithRange:NSMakeRange(0, 3)];
我还检查了确保“otherWord”具有正确的值,它确实如此


有什么建议吗

您需要将字符字[30]设置为等于某个值,否则当转换为在其上运行subStringWithRange时,它将没有足够的字符。因此出现了NSRange异常

char word[30] = {'a', 'b', 'c', 'd'};
scanf("%s", word);
NSString *otherWord = [NSString stringWithCString:word encoding:NSASCIIStringEncoding];
NSString *firstCharacter = [otherWord substringWithRange:NSMakeRange(0, 3)];
NSLog(@"%@",firstCharacter);

在代码中,首先使用字符数组创建字符串。之后,您将阅读用户输入:

更改:

NSString *otherWord = [NSString stringWithFormat:@"%s", word];
scanf("%s", word);
致:


您首先要强制转换到
NSString
,然后读取用户输入<代码>NSString*otherWord=[NSString stringWithFormat:@“%s”,word];scanf(“%s”,单词)在调用
scanf()
之前填充
word
数组/字符串是没有意义的,它会替换内容。(撇开
scanf()
输入字符串而不指定最大字段宽度这一事实不谈,这是非常不安全的,因为它可能会超出提供的缓冲区。)
scanf("%s", word);
NSString *otherWord = [NSString stringWithCString:word encoding:NSUTF8StringEncoding];