2009-09-17 3 views
3

код ниже. я tryind получить строковые ответы, как "a1", "с4"получение объектива c nsstring c c char []

это то, что я имею вместо "a1": "ADRESSE финалом: \ 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; 

запомнить j является числом между 1 и 8, поэтому вы получаете ASCII символ значение которого составляет j, а не символ 1...8. Вы должны использовать

lettreChiffre[1]= '0' + j; 

2. lettreChiffre является char массивом длиной 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

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

Смежные вопросы