substringWithRange使用硬编码字符串,但不使用用户输入字符串

时间:2015-01-17 04:39:09

标签: ios objective-c nsstring nsrange

当我对有问题的字符串进行硬编码并尝试使用substringWithRange时,它的工作正常。但是当我将用户输入作为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"它具有适当的价值。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你需要将char字[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);

答案 1 :(得分:1)

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

更改:

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

为:

scanf("%s", word);
NSString *otherWord = [NSString stringWithCString:word encoding:NSUTF8StringEncoding];