comment imprimer char tableau en c++
comment puis-je imprimer un tableau de char j'ai initialiser et puis concaténer à un autre char tableau? Veuillez voir le code ci-dessous
int main () {
char dest[1020];
char source[7]="baby";
cout <<"source: " <<source <<endl;
cout <<"return value: "<<strcat(dest, source) <<endl;
cout << "pointer pass: "<<dest <<endl;
return 0;
}
c'est la sortie
source: baby
return value: v����baby
pointer pass: v����baby
fondamentalement, je voudrais voir la sortie d'impression
source: baby
return value: baby
pointer pass: baby
Essayez de réinitialiser votre
dest
tableau en premier. char dest[1020] = {0};
OriginalL'auteur Carlitos Overflow | 2011-11-22
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas initialisé
dest
Vous simplement eu de la chance qu'il se trouve que la 6ème (aléatoire) de la valeur dans
dest
était0
. Si c'était le 1000e caractère, votre valeur de retour devraient être beaucoup plus longue. S'il était plus grand que 1024, alors vous obtiendrez un comportement indéfini.Les chaînes de caractères comme
char
les tableaux doivent être délimitées par des0
. Autrement il n'y a aucun moyen de savoir où ils sont. Vous pouvez également dire que la chaîne se termine à son zéro caractère explicitement la valeur 0;Ou vous pouvez initialiser l'ensemble de votre tableau avec des 0
Et étant donné que votre question est balisé
C++
je ne peux pas, mais note qu'en C++, nous utilisonsstd::string
s qui vous sauver de beaucoup de maux de tête. L'opérateur + peut être utilisé pour concaténer deuxstd::string
squelle est la différence par l'initialisation de la
char dest[1020] = "";
ouchar dest[1020] = {0};
comme indiqué par linuxuser27 ci-dessusTechniquement, oui, mais en pratique, sur tous implémentations je sais, si il se trouve que l'un des personnages étaient à zéro, rien de pire que de mauvais résultats qui allait arriver. Mais en tout cas, je suis d'accord que c'est UB de toute façon
les deux
char dest[1020] = {0}
etchar dest[1020] = {};
ensemble de TOUS les caractères de 0.char dest[1020] = ""
met juste le premier.dest[1020]="" y aurait également tous les caractères de 0 selon la nouvelle norme qui vient de sortir, mais pas clairement indiqué dans la norme précédente, en 2003.
OriginalL'auteur Armen Tsirunyan
Ne pas utiliser
char[]
. Si vous écrivez:vous n'aurez pas de problèmes. (En fait, votre problème est dû au fait
que
strcat
nécessite un'\0'
chaîne terminée comme premier argument,et vous êtes en lui donnant des données aléatoires. Ce qui est un comportement indéfini.)
je ne peux pas utiliser std::string parce que im traiter avec des personnages
Hein? Vous pouvez indice d'une chaîne de caractères avec
[]
commechar[]
Vous pouvez utiliser
char[]
en C++. Il est tout à fait de votre vie beaucoup plus difficile. Je voudrais examiner ce quelque chose de réservé pour les experts, travaillant dans les bas-niveau proches du matériel de code.c'était juste une blague. Bien sûr, vous pouvez. Et dans certains extrêmement bizarre situations, il pourrait même être mieux.
OriginalL'auteur James Kanze
votre
dest
tableau n'est pas initialisé. doncstrcat
essaie d'ajoutersource
à la fin dedest
qui est déterminée par une fuite'\0'
caractère, mais il est indéfini où un tableau non initialisé peut-end... (si il le fait...)donc, vous vous retrouvez impression plus ou moins aléatoire des caractères jusqu'à ce que accidentellement l'un
'\0'
caractère se produit...OriginalL'auteur xmoex
Essayer cette
Fait à l'aide de visual studio 2010 Express.
effacement de la mémoire à l'aide de memset dès que vous déclarez dest, c'est plus sûr. Aussi, si vous êtes à l'aide de VC++, l'utilisation strcat_s() au lieu de strcat().
memset
est plus sécurisé que l'initialisation avec= {};
? oOOriginalL'auteur getakanda