0

NSMutableString:rangeOfString:が本当に奇妙な結果を返している理由を理解しようとしています。NSLogは次のような結果を表示しています。

location = 9223372036854775807 length = 0:これはテストです

テスト文字列に「@@@」が含まれていないため、location = 0 length=0と予想されます。文字列に実際に「@@@」が含まれるまで、奇妙な場所が表示され続け、場所と長さが正しくなります。以下のコードスニペットには何が欠けていますか?

ServerPacketMotd.h

typedef struct _serverPacketMotdStruct
{
    int8_t  type;           /* SP_MOTD */
    int8_t  pad1;
    int8_t  pad2;
    int8_t  pad3;
    int8_t  line[80];
} serverPacketMotdStruct;

ServerPacketMotd.m

#import "ServerPacketMotd.h"

@interface ServerPacketMotd()
{
    NSMutableString *buffer;
}
@end

@implementation ServerPacketMotd

- (id)init
{
    if( !( self = [super init] ) )
        return nil;

    buffer = [[NSMutableString alloc] init];

    return self;
}

- (NSMutableData *)handlePacket:(NSData *)data withTag:(long)tag
{
    serverPacketMotdStruct gamePacket;
    uint16_t size = sizeof(serverPacketMotdStruct);
    NSRange packetWindow = NSMakeRange(0, size);
    NSRange atAtAt = NSMakeRange(0,0);

    while (expression)
    {
        [data getBytes:&gamePacket range:packetWindow];
        [buffer appendFormat:@"%s\n", gamePacket.line];

        atAtAt = [buffer rangeOfString:@"@@@"];
        NSLog(@"XXX location=%lu length=%lu:%@", atAtAt.location, atAtAt.length, buffer);
}
4

1 に答える 1

4

かどうかを確認しますatAtAt.location == NSNotFound。の場所0は、文字列が場所0で見つかったことを意味しますが、見つからないことを意味するわけではありません。

于 2013-01-04T23:25:56.503 に答える