Распечатать массив указателей на C

#arrays #c #pointers

#массивы #c #указатели

Вопрос:

Я хотел бы распечатать следующий массив символов.

 #define LENGTH 8

int main (){

    typedef char Arr[LENGTH];
    Arr test  = {1,0,1};
    Arr* a = amp;test;
    for(int i=0;i<LENGTH;i  ){
        printf("%s ", a[i]);
    }
}
 

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

1. Сначала исправьте ошибки компиляции.

2. Я могу скомпилировать это так

3. Также исправьте свои предупреждения

4. итак, теперь код компилируется, и у меня нет предупреждений.

5. Я думаю, я определил массив длиной 8, но я записываю только 3 элемента..

Ответ №1:

исправление множества ошибок и повторное редактирование для использования strlen:

 #define LENGTH 8
#include <stdio.h>
#include <string.h>
int main()
{
    typedef char Arr[LENGTH];
    Arr test  = {'1','0','1'};
    Arr* a = amp;test;
    size_t len = strlen(test);
    for(int i=0;i<len;i  ){
        printf("%c ", (*a)[i]);
    }
}
 

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

1. Это так приятно, я исправляю свои ошибки. теперь его работа.

2. можно использовать sizeof и найти размер массива указателей?

3. исходя из вашего другого вопроса, я понимаю, что вы имеете в виду найти строку len(не sizeof). Для этого используйте strlen(test)

4. если это сообщение отвечает на ваш вопрос, пожалуйста, отметьте его как ответ

Ответ №2:

Три проблемы:

  1. Вы используете %s , который предназначен для строк. Использовать %c для символов.
  2. Вам нужен (*a)[i] , как a указатель на массив, так *a и массив.
  3. 1 и 0 кодируют непечатаемые символы. Так что вы ничего не увидите.

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

1. И самое главное: никогда не вводите массивы или указатели typedef .

2. @Silidrone это проблема. Это человеческая ошибка : D

3. @AnttiHaapala Да, это плохая практика.