Member 13900554 Ответов: 3

Как я могу инициализировать массив типа char в C


Я легко могу сделать: char arr[3]={'O','a','b'};
но могу ли я написать его так: char arr[3]={"Привет","как","есть"};
пожалуйста , помогите мне, я нищий

Что я уже пробовал:

Я пытался войти
char arr[3]={'o','a','b'}
но сомнение для другого типа, как уже упоминалось выше

Bryian Tan

Вы можете попробовать что-то вроде
char *yourArr[3]={"Привет","как","есть"};

3 Ответов

Рейтинг:
2

Rick York

Мистер Грифф прав. Также имейте в виду, что часто размер массива не указан. Вот вам пример :

const char *strings[] =
{
   "first string",
   "second string",
   "third string"
};
а иногда добавляется Терминатор, чтобы вы могли зацикливаться до тех пор, пока не будет найден нуль:
const char *strings[] =
{
   "first string",
   "second string",
   "third string",
   NULL
};

for( int n = 0; strings[n] != NULL; ++n )
{
   // do something with the string here
}


CPallini

Насколько мне известно nullptr не доступен в языке программирования Си.

Rick York

Да, вы правы. Я так давно не пользовался простым "С", что совсем забыл. Я обновлю этот пост.

CPallini

5.

Рейтинг:
0

OriginalGriff

Проблема в том, что вы должны объявить переменные как правильный тип, чтобы использовать их:

char arr[3]
Выделяет достаточно места для 3-х человек char пункты - и в с char почти наверняка это ASCII, что означает, что он имеет ширину 8 бит, так что даже в 64-битной системе arr массив занимает всего три байта памяти.
Но это:
{"hi","how","are"}
это не три символа, это три строки, которые намного больше.
"hi"   requires 3 bytes: 'h', 'i', and a null terminator.
"how"  requires 4 bytes: 'h', 'o', 'w', and a null terminator.
"are"  requires 4 bytes: 'a', 'r', 'e', and a null terminator.
Кроме того, вы не храните данные в arr сам, arr требуется три pointer to char значения для того, чтобы получить доступ к строкам, и каждый указатель нуждается в 8 байтах на 64-битной системе! Если бы это не работало так, вы не могли бы эффективно индексировать строки, так как "расстояние" между двумя строками не было бы одинаковым каждый раз.
Чтобы использовать инициализатор строки, вам необходимо объявить arr чтобы у него было достаточно места для их хранения, а это означает объявление его в виде массива pointer to char ценности:
char* arr[3] = {"hi","how","are"};


CPallini

5.

Рейтинг:
0

KarstenK

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

В конце концов, большинство программистов используют некоторые классы для работы с текстами. Они часто имеют полезные функции, такие как поиск или замена. Введение в науку std:строка с некоторыми главами.


CPallini

Ну, кодеры Си не используют классы.