我有一個令人困惑的問題 - 對我來說,至少,這可能是非常簡單,我錯過了一些東西。我正在嘗試初始化一個可變大小的二維數組,該數組是一個結構的一部分。我沒有問題爲陣列分配內存,但是當我嘗試將字符分配給陣列或打印它們時,我收到了意外的結果=/C程序:打印時的方括號二維字符數組
我最後一次嘗試表明,無論何時將字符分配給陣列,當我打印'['將被打印...這是我第一次實際上能夠打印什麼。我以前的嘗試返回seg故障。這是代碼,我錯過了什麼。謝謝。
typedef struct world_map {
char ** map_array;
int X, Y;
} MAP_s;
//
MAP_s * map;
int init_map_array(void) {
int i; // temp
map = malloc(sizeof (MAP_s));
map->X = 20; // Columns
map->Y = 10; // Rows
//
map->map_array = malloc(map->Y * (sizeof (char *)));
//
if (map->map_array == 0) {
printf("ERROR: out of memory!");
return -1;
} else {
for (i = 0; i < map->Y; ++i) {
map->map_array[i] = malloc(map->X * sizeof (char));
if (map->map_array[i] == 0) {
printf("ERROR: out of memory!");
return -1;
}
}
}
int curr_pos_x, curr_pos_y;
int limit_x = map->X;
int limit_y = map->Y;
//
for (curr_pos_y = 0; curr_pos_y < limit_y; ++curr_pos_y) {
for (curr_pos_x = 0; curr_pos_x < limit_x; ++curr_pos_x) {
map->map_array[curr_pos_y][curr_pos_x] = "#";
}
}
return 1;
}
int draw_map(void) {
int curr_pos_x, curr_pos_y;
int limit_x = map->X;
int limit_y = map->Y;
//
for (curr_pos_y = 0; curr_pos_y < limit_y; ++curr_pos_y) {
for (curr_pos_x = 0; curr_pos_x < limit_x; ++curr_pos_x) {
printf("%c", map->map_array[curr_pos_y][curr_pos_x]);
}
printf("\n");
}
}
int main(void) {
init_map_array();
draw_map();
//
printf("STRUCT: %i\n", sizeof (map));
printf("X: %i\n", sizeof (map->X));
printf("Y: %i\n", sizeof (map->Y));
printf("ARRAY: %i\n", sizeof (map->map_array));
return (EXIT_SUCCESS);
}
作爲邊注,在端部4的那些的printf所有返回「4」,我相當肯定,如果一個結構包含3種元素,其各自是4個字節,它應該是大於4個字節本身...
該結構的大小將是12個字節;但是,您正在打印MAP_s *類型的地圖的大小,因此地圖只有4個字節。 – 2010-09-10 08:20:40