La bonne façon de copier des C-strings

Est-il un moyen facile de copier des C-strings?

J'ai const char *stringA, et je veux char *stringB de prendre la valeur (note que stringB n'est pas const). J'ai essayé stringB=(char*) stringA, mais qui fait stringB pointent toujours vers le même emplacement de mémoire, de sorte que lorsque stringA modifications ultérieures, stringB ne trop.

J'ai aussi essayé de strcpy(stringB,stringA), mais il me semble que si stringB n'était pas initialisé à un assez grand tableau, il y a une erreur de segmentation. Je ne suis pas super expérimenté avec C-strings bien, suis-je raté quelque chose d'évident? Si je viens d'initialiser stringB comme char *stringB[23], parce que je sais que je ne serai jamais une chaîne de plus de 22 personnages (et en permettant le terminateur null), est-ce le bon chemin? Si stringB est vérifiée pour l'égalité avec les autres C-strings, l'espace supplémentaire affecte en rien?

(et seulement à l'aide de cordes n'est pas une solution, car j'ai besoin d'un minimum de frais généraux et d'un accès facile à des caractères individuels)

Re: "et juste à l'aide de cordes n'est pas une solution, car j'ai besoin d'un minimum de frais généraux et d'un accès facile à des caractères individuels": je soupçonne fortement que vous êtes en train de surestimer les frais généraux, et vous êtes certainement en train de surestimer les difficultés d'accès aux caractères individuels: c = s[10] et s[10] = c à la fois le travail tout aussi bien si s est un std::string que si c'est une char*.
Veuillez formater votre question. Vous pouvez utiliser des backticks pour désigner code en ligne et retrait en quatre espaces d'avoir des blocs de code.
Utilisation std::string sauf si vous avez une autre raison que celle qui ne pas.
std::string est la solution. Vous êtes travaillant sous la fausse idée qu'il sera plus cher.
Désolé pour la mise en forme; je n'arrivais pas à comprendre ce que backticks (apostrophes ne semblent pas faire quoi que ce soit).

OriginalL'auteur akroy | 2012-03-06