2 votes

Copie de chaînes de caractères en C

Je suis en train d'apprendre les chaînes de caractères en c. J'utilise code::blocks comme compilateur, même si ce n'est pas seulement pour le c. Donc, le problème avec le code ci-dessous est que la sortie pour string2 est les 5 caractères stockés plus la sortie de string1. Je vais vous montrer :

#include <stdio.h>
#include <string.h>          /* make strncpy() available */

int main()
{
char string1[]= "To be or not to be?";
char string2[6];

/* copy first 5 characters in string1 to string2 */
strncpy (string2, string1, 5);

printf("1st string: %s\n", string1);
printf("2nd string: %s\n", string2);
return 0;
}

La sortie est :

1st string contains: To be or not to be? 
2nd string contains: To be To be or not to be?

Si vous voulez mon avis, c'est beaucoup plus que 5 caractères...

0voto

Keith Thompson Points 85120

strncpy() en dépit de son nom, n'est pas simplement une version plus sûre, spécifiée par des limites, de strcpy() . C'est une fonction obscure avec une sémantique obscure, et je dirais qu'elle n'aurait pas dû être incluse dans la bibliothèque standard du C.

strncat() d'autre part, est une version plus sûre, spécifiée par des bornes, de strcat() .

Voici une solution :

char string1[]= "To be or not to be?";
char string2[6];

string2[0] = '\0';
strncat (string2, string1, 5);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X