我遇到了一个非常奇怪的指针问题。正如您从下面的代码中看到的那样,我正在使用一种生成随机 4 x 4 字符网格的方法。它返回一个指向二维字符数组的指针。问题是当我尝试将返回的指针分配给另一个指针并尝试打印生成的网格时,我只得到一个奇怪的符号。
头文件
#import <Foundation/Foundation.h>
@interface GridGenerator : NSObject
{
}
-(char (*)[4]) generateGrid;
-(int (*)[2]) bbb;
-(void) print;
@end
实施文件
#import "GridGenerator.h"
@implementation GridGenerator
-(char (*)[4])generateGrid{
char vowels[6] = {'A','E','I','O','U','Y'};
char consonants[20] = {'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'};
char grid[4][4];
int vowelsLength = (sizeof vowels / sizeof vowels[0]);
int consLength = (sizeof consonants / sizeof consonants[0]);
int gridSize = (sizeof grid / sizeof grid[0]);
for(int i=0;i<gridSize;i++){
int vowelsInGridRow = 0;
int noOfVowels = (arc4random() % 2) + 1;
for(int j=0;j<gridSize;j++){
if(noOfVowels != vowelsInGridRow){
int vowIndex = arc4random() % vowelsLength;
char s = vowels[vowIndex];
grid[i][j] = s;
vowelsInGridRow++;
}
else{
int consIndex = arc4random() % consLength;
char s = consonants[consIndex];
grid[i][j] = s;
}
}
}
char (*sd)[4]= grid;
return sd;
}
-(void)print{
char (*grid)[4] = [self generateGrid];
NSString *s = @"\n";
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
s = [s stringByAppendingString:[NSString stringWithFormat:@"%c",grid[i][j]]];
}
s = [s stringByAppendingString:@"\n"];
}
NSLog(@"%@",s);
}
主文件(测试)
#import <Foundation/Foundation.h>
#import "Crossword.h"
#import "GridGenerator.h"
int main(int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
GridGenerator *gen = [[GridGenerator alloc] init];
[gen print];
[pool release];
return 0;
}
当我运行代码时,您可以看到下面的结果。在“U”之后有一个倒置的问号(此处不能粘贴)。
2013-06-02 11:24:29.923 填字游戏[646:303] ü
你有什么想法,什么可能导致这种情况发生?我已经挣扎了几个小时,我找不到任何解释。