obtenir l'objectif c nsstring de c char []
-
08-07-2019 - |
Question
code ci-dessous. J'essaie d'obtenir des réponses telles que "a1", "c4"
c’est ce que j’ai au lieu de "a1": "adresse finale: \ 340} 00 \ 214" avec ce prinf:
printf("\nadresse finale: %s",[self convertCGPointToSquareAdress:self.frame.origin]);
la méthode est la suivante:
-(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 m'aider s'il vous plaît? merci d'avance.
La solution
Je peux voir trois problèmes avec votre code:
1. Quand vous faites
lettreChiffre[1]=(char) j;
rappelez-vous que j
est un nombre compris entre 1
et 8
. Vous obtenez ainsi le caractère ASCII dont la valeur est j
, pas le caractère 1 ... 8
. Vous devriez 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 du 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
, ce qu'il ne peut pas faire. Soit utiliser
NSLog(@"adresse finale: %@", mynsstring)
ou reconvertissez NSString
en chaîne C:
printf("adresse finale: %s", [mynsstring UTF8String]);
De plus, comme l'a noté @dreamlax, vous n'avez pas vraiment besoin de la boucle. J'ai supposé que vous faisiez quelque chose d'autre et que vous avez rencontré ce problème, nous ne voyons donc pas le code complet Mais, s’il s’agit vraiment de l’intégralité de votre code, vous pouvez simplement supprimer la boucle comme le suggère @dreamlax.
Autres conseils
Quel est le but de la boucle? Vous avez une boucle qui force essentiellement une matrice à calculer l’adresse carrée & # 8221 ;. Votre méthode renverra également un pointeur non initialisé si x
est supérieur à 8.
Toute votre méthode pourrait être 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];
}