我有一個NSString
的length
4.邏輯上,這應該工作,並expYear
確實,但expMonth
拋出一個越界異常?範圍越界大小4目標c
expYear = [expDate substringWithRange:NSMakeRange(0, 2)];
expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
我有一個NSString
的length
4.邏輯上,這應該工作,並expYear
確實,但expMonth
拋出一個越界異常?範圍越界大小4目標c
expYear = [expDate substringWithRange:NSMakeRange(0, 2)];
expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
的範圍是location
和length
,而不是一個起始和結束位置。
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
因此與2
起始位置和3
長度超限你結束。
根據正確的規格更改範圍。
你不會說你是否這樣做,但是在運行這段代碼之前,你還應該進行長度檢查。 – Wain
範圍並不意味着從假設2到3是從2開始說在這個例子中,你最終用2-5個去未來3個指標的話,那麼這條線是超出範圍:
expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
哦!好的謝謝 – TooTiredToDrink
閱讀「NSMakeRange」的文檔。 – rmaddy
你顯然是超級有幫助 – TooTiredToDrink
我很認真。對於這樣的問題,您需要做的只是閱讀「NSMakeRange」的參考文檔,您會看到第二個參數的含義。鑑於反對票的數量,其他人似乎同意我的看法。您接受的答案基本上重複了文檔中的內容。 – rmaddy