Initialiser un Char*[]

la Question est dans le titre, comment faire pour initialiser un char*[] et de donner des valeurs en C++, je vous remercie.

24
demandé sur Romain 2010-02-10 23:25:16
la source

8 ответов

bien que vous le sachiez probablement, char*[] est un tableau de pointeurs vers les caractères, et je suppose que vous voulez stocker un certain nombre de chaînes. Initialiser un tableau de tels pointeurs est aussi simple que:

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

...ou si vous attribuez de la mémoire sur la pile:

char * array[SIZE];

vous voudriez alors probablement remplir le tableau avec une boucle telle que:

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

tel que noté dans les commentaires pour cette réponse, si vous attribuez le tableau avec new (dynamic allocation)) n'oubliez pas de supprimer votre tableau avec:

delete[] array;
18
répondu Stephen Cross 2010-02-11 00:00:16
la source

selon ce que vous voulez initialiser à vous pourrait faire l'un des:

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};

etc. etc.

10
répondu John Weldon 2010-02-10 23:30:29
la source

Comme ceci:

char* my_c_string;
char* x[] = { "hello", "world", 0, my_c_string };
7
répondu Max Shawabkeh 2010-02-10 23:31:17
la source

J'ai remarqué une chose dont vous devez être prudent... C et c++ ont divergé un peu dans la syntaxe d'initialisation. Comme Mark B. le souligne ci-dessus, vous pouvez initialiser un tableau de pointeurs char thusly:

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

Mais en C++. comme le souligne kriss, cela vous avertit d'une conversion dépréciée de string en char*. C'est parce que C++ suppose que vous voulez utiliser des chaînes pour les chaînes ;-}.

ce n'est pas toujours vrai. Donc quand vous voulez vraiment initialiser un tableau de char*, j'ai trouvé que je dois faire comme ceci:

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

Le compilateur est maintenant heureux...

6
répondu Don Doerner 2013-01-23 04:07:22
la source

si vous voulez vraiment juste un tableau de style C de chaînes constantes (par exemple des messages indexés):

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

si cependant vous essayez de maintenir un conteneur de chaînes de variables runtime, en utilisant la facilité C++std::vector<std::string> facilitera le suivi de toutes les opérations de mémoire.

std::vector<std::string> strings;
std::string my_string("Hello, world.")
strings.push_back("String1");
strings.push_back(my_string);
2
répondu Mark B 2010-02-10 23:38:49
la source

Comme ça:

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

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

I vous voulez qu'un tableau de chaînes C soit défini au moment de la compilation vous devriez utiliser un tableau de const char * à la place:

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

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

sans la const mon compilateur dirait : attention: conversion dépréciée de la constante string à ' char*'

2
répondu kriss 2010-02-10 23:46:48
la source

tout comme tout autre tableau:

char *a, *b, *c;
char* cs[] = {a, b, c}; // initialized
cs[0] = b; // assignment
1
répondu Peter Alexander 2010-02-10 23:30:01
la source
#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;
}
1
répondu xian 2010-02-10 23:38:12
la source

Autres questions sur