2015-07-19 2 views
2

Hey, j'ai une très longue chaîne et j'essaie de la coller à l'intérieur d'une matrice de caractères de taille fixe. Je ne m'inquiète pas si la chaîne est coupée, je veux juste que chaque élément du tableau char ait quelque chose.C++ comment mettre une grande chaîne dans un tableau de caractères fixes

par exemple

char first_ten_alaphabet[10]; 
string str = "abcdefghijklnopqrstuvwxyz"; 


strcpy(first_ten_alaphabet, str.c_str()); //<-- this will cause program to break 

toute aide serait agréable grâce

+2

Peut-être 'strncpy (first_ten_alaphabet, 10);'? Ou, mieux, ajoutez 'first_ten_alphabet [9] = '\ 0';'. – FoggyDay

+2

@FoggyDay 'strncpy' est dangereux car il ne garantit pas que la destination est terminée par des zéros. –

Répondre

3

Si vous souhaitez copier (et peut-être tronquer) une chaîne de style C, alors j'utiliser strncpy au lieu de « strcpy() ".

Une limitation de strncpy() est et non de mettre fin à la chaîne si les caractères #/sont exactement égaux à la longueur de la copie. C'est par conception, mais c'est un "getcha" potentiel si vous ne vous y attendez pas. Il suffit d'ajouter une deuxième déclaration qui met un caractère NULL à la position finale:

char first_ten_alphabet[10]; 
string str = "abcdefghijklnopqrstuvwxyz"; 

strncpy(first_ten_alphabet, str.c_str(), sizeof(first_ten_alphabet)); 
first_ten_alphabet[sizeof(first_ten_alphabet)-1] = '\0'; 
+1

merci, cela a fait l'affaire – conterio