2009-09-17 47 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