Подтвердить что ты не робот

Инициализация Char * []

Вопрос в заголовке, как мне инициализировать char * [] и давать значения ему на С++, спасибо.

4b9b3361

Ответ 1

Хотя вы, вероятно, знаете, char * [] - это массив указателей на символы, и я думаю, вы хотите сохранить несколько строк. Инициализация массива таких указателей проста:

char ** array = new char *[SIZE];

... или если вы выделяете память в стеке:

char * array[SIZE];

Тогда вы, вероятно, захотите заполнить массив контуром, например:

for(unsigned int i = 0; i < SIZE; i++){
    // str is likely to be an array of characters
    array[i] = str;
}

Как отмечено в комментариях к этому ответу, если вы выделяете массив с новым (динамическое распределение), не забудьте удалить свой массив с помощью:

delete[] array;

Ответ 2

В зависимости от того, что вы хотите инициализировать, вы можете сделать любой из:

char mystr[] = {'h','i',0};
char * myotherstring = "my other string";
char * mythirdstring = "goodbye";

char * myarr[] = {0};
char * myarr[] = {&mystr, myotherstring};
char * myarr[10];
char * myarr[10] = {0};
char * myarr[10] = {&mystr, myotherstring, mythirdstring, 0};

и т.д.. и др.

Ответ 3

Вот так:

char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };

Ответ 4

Одна вещь, которую я заметил, что вы должны быть осторожны... C и С++ немного расходятся в синтаксисе инициализации. Как указывает Марк Б., вы можете инициализировать массив указателей char следующим образом:

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};

Но в С++. как указывает крип, это дает вам предупреждение об устаревшем преобразовании из строки в char *. Это потому, что С++ предполагает, что вы захотите использовать строки для строк; -}.

Это не всегда так. Поэтому, когда вы действительно хотите инициализировать массив из char *, я обнаружил, что мне нужно сделать это так:

const char* messages[] =
{
    (char*)("Beginning"),
    (char*)("Working"),
    (char*)("Finishing"),
    (char*)("Done")
};

Теперь компилятор счастлив...

Ответ 5

Вроде:

char p1 = 'A';
char p2 = 'B';
char * t[] = {&p1, &p2};

std::cout << "p1=" << *t[0] << ", p2=" << *t[1] << std::endl;

Но почему-то я считаю, что не ответ на реальный вопрос...

Мне нужен массив строк C, определенный во время компиляции, вы должны использовать массив const char *:

const char * t2[] = {"string1", "string2"};

std::cout << "p1=" << t2[0] << ", p2=" << t2[1] << std::endl;

Без const мой компилятор скажет:   предупреждение: устаревшее преобразование из строковой константы в 'char *

Ответ 6

Если вам действительно нужен массив константных строк C (например, проиндексированные сообщения):

const char* messages[] =
{
    "Beginning",
    "Working",
    "Finishing",
    "Done"
};

Если, однако, вы пытаетесь сохранить контейнер переменных строки выполнения, использование средства С++ std::vector<std::string> облегчит отслеживание всех операций с памятью.

std::vector<std::string> strings;
std::string my_string("Hello, world.")
strings.push_back("String1");
strings.push_back(my_string);

Ответ 7

Как и любой другой массив:

char *a, *b, *c;
char* cs[] = {a, b, c}; // initialized
cs[0] = b; // assignment

Ответ 8

#include <iostream>

int main(int argc, char *argv[])
{
    char **strings = new char *[2]; // create an array of two character pointers
    strings[0] = "hello"; // set the first pointer in the array to "hello"
    strings[1] = "world"; // set the second pointer in the array to "world"

    // loop through the array and print whatever it points to out with a space
    // after it
    for (int i = 0; i < 2; ++i) {
        std::cout << strings[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}