Создать 2D-массив из одномерного массива

#c #arrays #2d

#c #массивы #2d

Вопрос:

Как сказано в названии, у меня есть функция «load», которая возвращает структуру, содержащую 2 int и массив символов. Этот массив находится в 1D и выглядит как : [################ ### $ $ ### # .# ### . #.@ ###$# * ### ###############] И я хотел бы распечатать его как :

 ##########
######  ##
# $  $  ##
# #  .# ##
#  . #.@ #
##$# *   #
##  ######
##########
  

зная, что ширина здесь равна 10.
Итак, мой вопрос в том, как через каждые 10 символов удается возвращаться к следующей строке …?
Вот что я написал до сих пор :

 void print_map(map map_loaded){
    char *p=map_loaded.p_char;
    int height=map_loaded.height;
    for(int i=0; i<height; i  ){
            printf("%c", *p[i]);
        }
  

Как вы можете видеть, я просто знаю, как читать каждый символ, но понятия не имею, как вернуться к строке…
Я был бы очень признателен, если бы кто-нибудь прочитал мой код и оставил мне свой отзыв… Заранее спасибо!

Комментарии:

1. Вы должны показать, как определена ваша map структура, и объяснить, что означают поля. Например: Является map_loaded.height количеством строк в печатной таблице? map_loaded.p_char Завершается нулем? Какие еще элементы данных есть в map структуре?

2. Выведите ‘n’ для перевода строки.

3. *p[i] это плохо! в любом случае, вы смотрите на это… *p имеет тип char ; вы не можете индексировать символ … p[i] имеет тип char ; вы не можете разыменовать char.

4. @pmg можете ли вы подробнее рассказать о том, в чем проблема с разыменованием символа. Я раньше не слышал об этой проблеме.

5. @Patrick: как вы думаете *(42) (разыменование целого числа 42) является законным? Как насчет *("foo") (разыменования (строки, преобразованной в) указатель)? Или *("foo"[2]) (разыменовать символ)?

Ответ №1:

Поскольку все, что вам нужно, это новая строка после каждых 10 символов, просто проверьте, напечатали ли вы 10 символов с момента последнего добавления новой строки.

 void print_map(map map_loaded){
char *p=map_loaded.p_char; 
int height=map_loaded.height; 
for(int i=0; i<height; i  ){ 
printf("%c", p[i]);

if( (i 1)%10==0)
printf("n");
}
  

Комментарии:

1. *p[i] это плохо! в любом случае, вы смотрите на это… *p имеет тип char ; вы не можете индексировать символ … p[i] имеет тип char ; вы не можете разыменовать char.