Il semble que vous ayez des problèmes avec les tableaux. Comme Brian a souligné, les indices de tableau commencent à 0 et non 1. Ainsi, vos deux strings
sont string_array[0]
et string_array[1]
, passtring_array[1]
et string_array[2]
.
En outre, si votre fonction prend un paramètre const char* cstring_array
, alors votre variable char* cstring_array[2]
n'est probablement pas ce que vous voulez. Si vous deviez le transmettre tel quel, vous passeriez essentiellement dans un char**
, pas un char*
, car vous pouvez considérer que le nom d'un tableau est équivalent à un pointeur sur son premier élément.
Comme vous l'avez présenté votre question, vous pourrait faire quelque chose comme ce qui suit (correction de l'erreur d'indexation, et en supposant que la fonction dont vous parlez est appelé myFunction
):
...
cstring_array[0] = string_array[0].c_str();
cstring_array[1] = string_array[1].c_str();
myFunction (cstring_array[0]);
myFunction (cstring_array[1]);
...
Cependant, une simple équivalent qui ne nécessite pas du tout cstring_array
est:
...
myFunction (string_array[0].c_str());
myFunction (string_array[1].c_str());
...
Ou, si votre intention était de passer un seul tableau contenant char
bot cordes h (ce qui est une possibilité de mon interprétation de la question), alors ce que vous entendez vraiment que vous voulez faire est que vous voulez produire une seule chaîne étant la concaténation de vos deux d'origine:
...
std::string str = string_array[0] + string_array[1];
myFunction (str.c_str());
...
Espoir qui aide !
EDIT: étant donné les commentaires qui sont apparus depuis que j'ai écrit ceci, je dirais que le premier exemple est proche de ce dont vous avez besoin. Je ferais ce qui suit (où N est le nombre d'entrées dans l'un ou l'autre tableau):
...
for (int i = 0; i < N; i++)
cstring_array[i] = string_array[i].c_str();
myFunction (cstring_array);
...
C'est la seule approche possible. Il n'y a pas de fonction standard (AFAIK) qui, étant donné un tableau de string
donnera un tableau de char*
. Je suppose que les raisons sont les suivantes: - Ce n'est pas quelque chose qui doit être fait souvent, donc il y a peu d'appels pour qu'une telle fonction soit largement disponible. - S'il y avait une telle fonction, elle serait probablement très similaire à celle ci-dessus, auquel cas c'est tellement trivial que cela soit inutile. Fondamentalement, pour répondre à votre question, je ne pense pas qu'il existe une méthode plus efficace, et même s'il y avait une fonction de bibliothèque standard pour ce faire, elle utiliserait quand même cette approche.
Les index sont basés sur 0 en C++. Donc vous voulez dire 'string_array [0]' et 'string_array [1]' –
Oui, bien sûr, merci – hoxnox
Comment la fonction utilise-t-elle const char * cstring_array []? –