2010-10-13 8 views
0

Ceci est très basique, mais si:Comment déclarer chaîne de tableau dans C++

Je veux une chaîne avec 4 caracteres: « ABCD »

comment dois-je déclarer une nouvelle chaîne, comme ça?

char *newStr = new char[4]; // or -> char newStr[4]; 

strcpy(newStr, "abcd"); 

le null '\ 0' doit être la taille de la chaîne, donc nouveau char [5]?

+0

'new' n'est pas un mot-clé' C'. Peut-être que vous vouliez marquer cette question comme 'C++'? – pmg

+0

vous avez raison, je vais changer le titre – okami

+7

Utilisez 'std :: string'. Ne le faites pas à la main. – GManNickG

Répondre

4

oui, caractère \ 0 est une partie de chaîne et vous devez allouer de la mémoire pour elle aussi

0

Si elle est une chaîne littérale, vous pouvez faire l'une de ces:

char *string = "abcd"; 
char astring[] = "abcd"; 

Si vous voulez savoir ceci pour éventuellement copier des chaînes, vous pouvez avoir un tampon, ou allouer de la mémoire, et l'espace pour '\ 0' est nécessaire, même si strlen("abcd") retournera 4 parce qu'il ne compte pas le terminateur.

/* buffer way */ 
char string[5]; 
strcpy(string, "abcd"); 

/* allocating memory */ 
// char *ptr = malloc(5*sizeof(*ptr)); // question was retagged C++ 
char *ptr = static_cast<char*>(malloc(5*sizeof(*ptr)); 
strcpy(ptr,"abcd"); 
/* more stuff */ 
free(ptr); 

Puisque la question a été retagged à C++, vous pouvez également utiliser new et delete. Vous pouvez également utiliser std::string.

+0

Il convient de noter que vos deux premières suggestions semblent impliquer que la langue est C - mais je ne pense pas que C a static_cast ou des modèles. :) Si vous le faites, vous utilisez C++, et par conséquent, vous pouvez éviter d'utiliser malloc pour faire bonne mesure. :) – Arafangion

+0

La question originale a été étiquetée 'C', donc j'ai initialement écrit du code C avec 'malloc'. Il a été relancé plus tard en C++ donc j'ai changé l'exemple 'malloc' d'origine pour lancer le retour' void * '. – birryree

3

Vous n'avez pas de "nouveau" en C, mais seulement en C++.

Vous pouvez:

char* string = "abc"; 

ou

char string[] = "abc"; 

ou

char* string = (char*) malloc(sizeof(char) * 4); 
strcpy(string, "abc"); 
string[3]='\0'; 
/* remember to free the used memory */ 

ou

char string[] = { 'a', 'b', 'c', '\0' }; 
+0

(char *) cast n'est pas nécessaire, sizeof (char) est toujours 1, chaîne [3] = '\ 0' n'est pas nécessaire, strcpy fait – user411313

+0

la conversion est nécessaire, sizeof (char) ne peut pas être 1, strcpy ne copie pas le caractère final. edit: la distribution n'est pas nécessaire au compilateur, je conseille de le garder pour plus de clarté. – vulkanino

+1

@vulkanino: à droite (en C++ mais pas C), faux (dans les deux cas), faux (dans les deux cas). –

1

Ce s devrait faire le sale boulot pour vous:

char newString[] = "abcd"; 

Aussi, oui, vous avez besoin de nouveau char [5];

0
constructeurs de cordes

/------------------- ----------------

string emp("");    // constructs the "empty string" 
string emp2;     // constructs another "empty string" 
string spc(" ");    // constructs string containing " " 
string sstr("Some string"); // string containing "Some string" 
char frob[] = "Frobnitz"; 
string sfrob(frob);   // constructs a C++ string containing 
          // "Frobnitz" from a C-style string 
string bar = "foobar";  // string containing "foobar" 

// ------------------- stdout, c_str() -------------------- 

Source : http://www-cs-students.stanford.edu/~sjac/c-to-cpp-info/string-class

+1

Non, il s'agit de la classe de chaînes, disponible uniquement en la bibliothèque standard en C++ – vulkanino

+0

Crap, mes excuses. – halfevil

4

Oui, le caractère de terminaison nul fait partie de la chaîne.Donc, vous devez allouer de l'espace pour 5 caractères:

char *newStr = new char[5]; 
strcpy(newStr, "abcd"); 

Ne pas oublier de libérer l'allocation dynamique de la mémoire une fois que vous avez fini d'utiliser comme:

delete[] newStr; 

Sinon, vous pouvez également faire:

char newStr[] = "abcd"; 

En C++, il est préférable d'utiliser la string class pour les chaînes représentant:

string newStr = "abcd"; 
1

Si cela est C++ (semble à nouveau marqué pour ce que j'ai lu), ce qui est erroné avec

std::string my_string = "abcd"; 

?

N'est-ce pas ce que vous cherchez? Je pourrais manquer quelque chose.

Questions connexes