2017-06-30 13 views
-4

Je ne parviens pas à créer strncpy lorsque je veux copier 2 caractères d'une chaîne, mais le même code fonctionne lorsque je veux copier 3 caractères.C strncpy 2 char

Dans cet exemple, je dois strncpy() stocker 12 'à' variable:

void main(){ 
    const char* from = "12345678"; 
    char *to = (char*) malloc(3); 
    strncpy(to, from, 2); 

    printf("%s", to); 
    free(to); 
} 

mais quand je l'utilise strncpy(to, from, 3) avec malloc(4), il fonctionne bien. Toute solution pour que cela fonctionne?

+2

Il est difficile d'offrir des solutions lorsque l'énoncé du problème est simplement «ça ne marche pas». S'il vous plaît [modifier] votre question pour donner une description plus complète de ce que vous attendiez et comment cela diffère des résultats réels. Voir [demander] pour des conseils sur ce qui fait une bonne explication. –

+2

Il suffit de lire le document: Aucun caractère nul n'est implicitement ajouté à la fin de la destination si la source est plus longue que num. – Boiethios

+2

Indice pour le futur: N'utilisez pas 'strncpy', la plupart du temps il ne fait pas ce que vous voulez. –

Répondre

3

Vous avez oublié d'ajouter la chaîne de destination avec un zéro final.

char *to = (char*) malloc(3); 
strncpy(to, from, 2); 
to[2] = '\0'; 
+0

cela fonctionne comme ça, merci bien si j'utilise malloc (3) et besoin de 2 caractères ne seront pas ajoutés à la fin de ce tableau? – Night5talker

+1

Vous n'avez pas besoin de la distribution en C –