#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:
Три проблемы:
- Вы используете
%s
, который предназначен для строк. Использовать%c
для символов. - Вам нужен
(*a)[i]
, какa
указатель на массив, так*a
и массив. - 1 и 0 кодируют непечатаемые символы. Так что вы ничего не увидите.
Комментарии:
1. И самое главное: никогда не вводите массивы или указатели typedef .
2. @Silidrone это проблема. Это человеческая ошибка : D
3. @AnttiHaapala Да, это плохая практика.