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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2013, 23:13
Ответы с готовыми решениями:

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

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

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

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

8
12 / 12 / 2
Регистрация: 28.09.2012
Сообщений: 39
19.02.2013, 23:31 2
C
1
2
3
    char table[40];
 
    strcpy(table,"hello");
1
99 / 39 / 12
Регистрация: 30.01.2011
Сообщений: 129
19.02.2013, 23:34 3
вы путаете символы и строки, в Си строки обозначаются "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
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:01  [ТС] 4
Так более менее проясняется.

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

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

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

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
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:12  [ТС] 7
Совсем прекрасно

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

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 8
Цитата Сообщение от 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
7 / 7 / 3
Регистрация: 19.02.2013
Сообщений: 77
20.02.2013, 00:38  [ТС] 9
Вот чёрт вы же уже пояснили это, а я опять путаю.

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

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

Т.е. в этом массиве может 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
20.02.2013, 00:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2013, 00:38
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru