2009-09-17 4 views
3

code ci-dessous. je suis tryind pour obtenir des réponses de chaîne comme "a1", "c4"l'obtention de l'objectif c nsstring de c char []

ce que je vais avoir au lieu de "A1": "finale de la Dirección: \ 340} 00 \ 214" avec ce prinf:

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

la méthode est:

-(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; 

}

pouvez-vous s'il vous plaît me aider? merci d'avance.

Répondre

2

Il y a trois problèmes que je peux voir avec votre code:

1. Lorsque vous faites

lettreChiffre[1]=(char) j; 

rappeler j est un nombre compris entre 1 et 8, de sorte que vous obtenez le caractère ASCII dont la valeur est j, pas le caractère 1...8. Vous devez utiliser

lettreChiffre[1]= '0' + j; 

2. lettreChiffre est un tableau char de longueur 2, ce qui signifie qu'il n'y a pas de place pour le caractère nul terminal. Cela peut fonctionner, mais peut vous donner du charabia. Vous devriez plutôt déclarer

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

3. Vous essayez d'utiliser printf pour imprimer un NSString, qu'il ne peut pas faire. Soit utiliser

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

ou convertir le NSString revenir à une chaîne C:

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

En outre, comme l'a noté @dreamlax, vous ne avez pas vraiment besoin de la boucle. J'ai supposé que vous étiez en train de faire autre chose et j'ai rencontré ce problème, donc nous ne voyons pas vraiment le code complet. Mais, si c'est vraiment l'intégralité de votre code, alors vous pouvez simplement supprimer la boucle comme suggéré par @dreamlax.

+0

cela fonctionne. merci – kossibox

2

Quel est le but de la boucle? Vous avez une boucle qui force essentiellement une matrice pour calculer l'adresse du carré “ ”. Votre méthode retournera également un pointeur non initialisé si x est supérieur à 8.

Votre méthode entière pourrait être rendue beaucoup plus simple.

- (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

merci de votre réponse – kossibox