Une chaîne n'est qu'une gamme de caractères (a un caractère '\ 0' ou null à la fin). Mais lorsque j'utilise la fonction GetLine en C ++, cela me donne une erreur si j'utilise caractère, mais aucune erreur pour la chaîne.
Les travaux suivants: mais quand j'utilise caractère au lieu de chaîne.it ne fonctionne pas p> ` p> < / p>
4 Réponses :
Vous mélangez des cordes C et C ++. p>
"Une chaîne n'est qu'une gamme de caractères (a un caractère '\ 0' ou null à la fin)." EM> c'est vrai pour C Strings. STD :: String Code> Dans votre code est une chaîne C ++. Ils sont fondamentalement différents. Une chaîne C ++ n'est pas un matrice de tableau. C'est un objet de classe
std :: string code>. Vous pouvez copier une chaîne C dans une chaîne C ++ et vous pouvez initialiser une chaîne C ++ avec C chaîne C. Vous pouvez convertir une chaîne C ++ en chaîne Const C avec
std :: String :: C_STR () CODE>. P>
std :: getline code> attend un
std :: string code> comme second paramètre. Vous ne pouvez pas l'utiliser avec C chaîne. P>
std :: La chaîne est une classe composée de caractères et non un tableau de caractères. Cela signifie que les deux types sont différents. Voir STD :: String Définition: ici P>
La fonction GetLine a besoin d'une chaîne. Cela ne fonctionnera pas pour un tableau de caractères. Voir Docs: ici P>
Vous pensez peut-être quelque chose comme CS50.h en C, où Il y a une forme de string code> est un typlef de
char * code>. Ce n'est pas le cas en C ++, où
std :: string code> est en fait un type complètement différent.
getline () code>
que vous pouvez utiliser avec char * code>, bien que ce n'est pas libre une fonction. C'est une fonction de membre de
std :: istream code>, quel
std :: Cin code> hérite. Voici votre code modifié pour l'utiliser: P>
#include<iostream>
int main()
{
char name[50];
std::cout<<"Name: ";
std::cin.getline(name, sizeof name);
std::cout<<"Name: "<<name;
return 0;
}
C'est très simple. P>
Un caractère est généralement un seul caractère d'ASCII. par exemple A, B, C et autres. P>
D'autre part, une chaîne est généralement une collection ou une série de places l'une après autre. Exemple "Bonjour", "Salut Bro". P>
Vous mélangez des cordes C et C ++. "Une chaîne n'est qu'une gamme de caractères (a un caractère" \ 0 'ou null à la fin) " I> c'est vrai pour C Strings.
std :: string code> est une chaîne C ++. Ils sont fondamentalement différents.
Pour le sac de compréhension, vous pouvez dire qu'une chaîne est une matrice de caractères avec '\ 0' à la fin, mais ce n'est pas si simple. STD :: String a de nombreuses fonctions définies pour celui-ci qui ne fonctionnera pas pour la matrice de caractères.
std :: string code> est en fait une enveloppe de classe dynamique pour les chaînes C primitives.
std :: getline () code> attend un
std :: string code> pas
char * code>. Vous voudrez peut-être utiliser
fgets (nom, stdin, 50) code> dans cette situation particulière, mais ce n'est pas requis i> dans le contexte de C ++ où
std :: string < / code> existe. Par conséquent, vous allez presque jamais i> trouver la nécessité d'avoir à rencontrer
char * code>,
const char * code>, etc. sauf dans certains cas importants où ils sont obligatoires (par exemple, si vous utilisez une bibliothèque C externe C).
Un
std :: string code> est un type de classe qui gère une collection de
char code> s. Un tableau de
Char code> est une collecte brute de
Char code> S qui se trouvent dans un bloc de mémoire contiguë - c'est-à-dire un type complètement différent.
std :: getline () code> a des surcharges pour la lecture à un
std :: string code> mais pas pour lire à un tableau brut de
Char code>. Cependant, les flux d'entrée ont une fonction de membre à lire à un tableau de
char code> (mais pas à un
std :: string code>) Donc, dans le second cas, utilisez
std :: Cin.getline (nom, taille de (nom)) code> ou (plus grossièrement dans votre cas)
std :: cin.getline (nom, 50) code>.