С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/231: Рейтинг темы: голосов - 231, средняя оценка - 4.53
 Аватар для art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77

Как объявить char массив

19.02.2013, 23:13. Показов 48979. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени дня.
Возникла такая проблема.

C
1
2
3
4
5
6
7
8
char table[40] = "hello";               /* работает */
 
void main()
{
 
    table[40] = "hello";          /* ошибка */
 
}
Т.е. если инициализировать при объявлении - то все работает, иначе выскакивает ошибка.

Что я не так делаю? Как присваивать строку char-массиву?

Еще непонимаю, как обстоят дела с двумерными char массивами. Необходимо следующее: в каждую ячейку класть букву, например, "р".

Как это правильно сделать:
C
1
table[1][2] = "p";
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2013, 23:13
Ответы с готовыми решениями:

Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char
Задание: Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char. Можно...

Что такое тип *char и как объявить переменную такого типа?
"Записи в линейном списке содержат ключевое поле типа *char(строка символов).", подскажите, что за тип *char и как объявить переменную...

Объявить массив mb как массив литерных указателей без указания количества элементов
Помогите решить такую задачу: Объявить массив mb как массив литерных указателей без указания количества элементов; инициализировать...

8
 Аватар для Iron Acorn
12 / 12 / 2
Регистрация: 28.09.2012
Сообщений: 39
19.02.2013, 23:31
C
1
2
3
    char table[40];
 
    strcpy(table,"hello");
1
99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
19.02.2013, 23:34
вы путаете символы и строки, в Си строки обозначаются "str", а символы как 's','t','r'
C++
1
char table[40] = "hello";
так Вы создаете массив переменных типа char из 40 элементов и присваиваете первому элементу с индексом 0 указатель на строку "hello".
C++
1
table[40] = "hello";          /* ошибка */
так вы пытаетесь присвоить 40-му элементу массива table[] указатель на строку "hello", что разумеется не сработает. в случае с Си необходимо делать так:
C++
1
char charTable[40] = {'h','e','l','l','o'};
тогда в памяти будет так [h] [e] [l] [l] [o] [нуль][нуль][нуль] и т.д.;
а если делать так
C++
1
char strTable[40] = {"hello","from","hell"};
то в памяти будет так [указатель на строку "hello"] [указатель на строку "from"] [указатель на строку "hell"][нуль]
1
 Аватар для art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:01  [ТС]
Так более менее проясняется.

Как в двухмерный массив положить символ?

Допустим, 3 на 3 массив. На примере, крестиков-ноликов, пусть имеются два символа - x и o, думаю дальше понятно.
0
 Аватар для Iron Acorn
12 / 12 / 2
Регистрация: 28.09.2012
Сообщений: 39
20.02.2013, 00:03
char matr[3][3];

matr[0][1] = 'x';
0
99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
20.02.2013, 00:05
Как в двухмерный массив положить символ?

C++
1
2
3
4
void putSymb(int x,int y, char[][] array, char symbol)
{
array[x][y] = symbol;
}
или

C++
1
2
3
4
char array[3][3] = {0}; // инициализируем все нулем
array[1][0] = 'x';
array[1][1] = 'y';
array[1][2] = 'u';
1
 Аватар для art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:12  [ТС]
Совсем прекрасно

Осталось теперь только вывести

C
1
2
3
4
table[1][4] = 'x';
 
 
printf("%s", table[1][4] );
Не работает(
0
99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
20.02.2013, 00:15
Цитата Сообщение от art1535 Посмотреть сообщение

C
1
2
3
4
table[1][4] = 'x';
 
 
printf("%s", table[1][4] );
Не работает(
может "%c" ? символ выводите, а не строку.
а вообще, если смущает, можно

C
1
2
3
char temp;
temp = table[1][4];
printf("%c", temp ); // так почитабельнее будет
1
 Аватар для art1535
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:38  [ТС]
Вот чёрт вы же уже пояснили это, а я опять путаю.

Да, теперь все замечательно.

Насколько я понимаю, строка - это массив символов.

Т.е. в этом массиве может 39 указателей на массивы-символов и концевик?
C
1
char strTable[40] = {"hello","from","hell"};


C
1
2
3
char charTable1[] = {'h','e','l','l','o'};
char charTable2[] = {'f','r','o','m'};
........
Добавлено через 14 минут
А строку присвоить - только с помощью функции strcpy?

И будет это выглядеть таким образом?

C
1
2
3
4
char table[40];
strcpy(table,"hello");
 
/* table[40]={"hello"} */
Т.е. опять-таки указатель на массив символов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2013, 00:38
Помогаю со студенческими работами здесь

Объявить массив rs из 5 строк как двумерный символьный массив
Объявить массив rs из 5 строк как двумерный символьный массив. Инициализировать rs значениями “un”, “une”, “des”, “de”. char rs =...

Как объявить динамический массив?
Как объявить динамический массив?

Как объявить массив слов?
в массиве должны быть записаны слова - сто, двести, и т.д. до тысячи

Как объявить массив в структуре
Привет. В чистом С я не силён, завалился на, казалось бы, простой задаче. Как правильно объявить структуру вроде typedef struct st...

Как объявить динамический массив структур?
Не знаю как объявить динамический массив структур. #include<stdio.h> #include<stdlib.h> #include<conio.h> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru