2009-09-17 36 views
3

下面的代碼獲取目標文件。 我是tryind獲取字符串的答案,如 「A1」, 「C4」從c char []

這是我遇到的不是 「A1」 的內容: 「住址結局:\ 340} 00 \ 214」 這個prinf:

printf("\nadresse finale: %s",[self convertCGPointToSquareAdress:self.frame.origin]); 

方法是:

-(NSString *) convertCGPointToSquareAdress:(CGPoint) point{ 
int x= point.x /PIECE_WIDTH; 
int y=point.y/PIECE_WIDTH; 
char lettreChiffre[2]; 
//char chiffre; 
NSString *squareAdress; 
//ascii a=97 , b=98... h=105 
for (int i=97; i<105; i++) { 
    for (int j=8; j>0; j--) { 
     if(i-97==x && j-1==y){ 
      NSLog(@"enterrrrrrrrrred if convertCGPointToSquareAdress"); 
      lettreChiffre[0]=i; 
      lettreChiffre[1]=(char) j; 
      printf(" lettreChiffre: %s ", lettreChiffre); 
      NSString *squareAdress=[NSString stringWithFormat:@"%s", lettreChiffre]; 
      break; 
     } 
    } 
} 
return squareAdress; 

}

你能幫幫我嗎? 在此先感謝。

回答

2

有三個問題,我可以與你的代碼中看到:

1. 當你

lettreChiffre[1]=(char) j; 

記得j18之間的數字,所以你得到的ASCII字符其價值是j,而不是字符1...8。你應該使用

lettreChiffre[1]= '0' + j; 

2. lettreChiffrechar陣列長度爲2的,這意味着沒有空間給終端空字符。這可能會起作用,但可能會給你亂碼。而應該聲明

char lettreChiffre[3]; 
lettreChiffre[2] = '\0'; 

3. 您正在嘗試使用printf打印的NSString,它不能做的。要麼使用

NSLog(@"adresse finale: %@", mynsstring) 

或轉換NSString回到C-字符串:

printf("adresse finale: %s", [mynsstring UTF8String]); 

此外,由@dreamlax注意,你並不真正需要的循環。我認爲你正在做其他事情,並遇到了這個麻煩,所以我們並沒有真正看到完整的代碼。但是,如果這完全是您的代碼,那麼您可以簡單地將循環移除爲@dreamlax建議的。

+0

它的工作原理。謝謝 – kossibox 2009-09-17 12:37:59

2

循環的目的是什麼?你有一個循環,基本上強迫一個矩陣來計算「平方地址」。如果x大於8,則您的方法也會返回未初始化的指針。

您的整個方法可以變得更簡單。

- (NSString *) convertCGPointToSquareAdress:(CGRect) point 
{ 
    unsigned int x = point.x/PIECE_WIDTH; 
    unsigned int y = point.y/PIECE_WIDTH; 

    // Do some range checking to ensure x and y are valid. 

    char lettreChiffre[3]; 
    lettreChiffre[0] = 'a' + x; 
    lettreChiffre[1] = '1' + y; 
    lettreChiffre[2] = '\0'; 

    return [NSString stringWithCString:letterChiffre encoding:NSASCIIStringEncoding]; 
} 
+0

感謝您的回答 – kossibox 2009-09-17 13:20:26