получение целевой строки c c char [] - PullRequest
3 голосов
/ 17 сентября 2009

код ниже. я пытаюсь получить строковые ответы, такие как "a1", "c4"

вот что у меня вместо "a1": "финал адреса: \ 340} 00 \ 214" с этим принф:

    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 ]

2 голосов
/ 17 сентября 2009

Какова цель цикла? У вас есть цикл, который по сути грубой силой заставляет матрицу вычислять «квадратный адрес». Ваш метод также вернет неинициализированный указатель, если 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];
}
2 голосов
/ 17 сентября 2009

С вашим кодом я вижу три проблемы:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...