2016-08-10 2 views
-5

J'ai une chaîne, disons toioyhpknmtlghk .Je souhaite créer un tableau de caractères 2-d ayant n lignes de sorte qu'il contienne des premier, deuxième, troisième sous-chaînes de longueur n comme ses lignes.Problème lors de la copie de la chaîne à l'aide de memcpy

Par exemple, ici n = 5 les chaînes de sous de longueur 5 sont, toioyhpknm et tlghk donc ensemble arr devrait ressembler à

t o i o y 
h p k n m 
t l g h k 

Maintenant, cela aurait pu être plus facile si je copie les caractères en boucle à travers le tableau mais ici j'essaie d'utiliser memcpy comme,

int main() 
{ 
    long n; 
    cin>>n; 
    char a[3][n+1];char str[20]; //I have taken n+1 columns as n for substring and 1 for '\0' 
    scanf("%s",str); 
    char *p=str; 
    memcpy(a[0],p,n);strcat(a[0],"\0"); 
    p=p+n; 
    memcpy(a[1],p,n);strcat(a[1],"\0"); 
    p=p+n; 
    memcpy(a[2],p,n);strcat(a[2],"\0"); 

    for(int i=0;i<3;i++) 
    { 
    printf("%s\n",a[i]); 
    } 

} 

Mais la sortie du tableau des résultats obtenus sont les suivants,

//input 
5 
toioyhpknmtlghk 

//output  
toioy 
hpknm{tlghk‼â 
tlghk‼â 
+3

'cin >> n;' est pas valide C. (sauf si 'cin' est un objet de nombre entier type, 'cin' et' n' sont initialisés, et la valeur de 'n' est positive et inférieure à la largeur du type de' cin', auquel cas c'est une instruction sans effet – EOF

+0

Afficher tout le texte/output session –

+0

Que devrait-il faire? strcat (a [0], "\ 0"); 'do? – mch

Répondre

1

La commande strcat(a[0],"\0"); travaille sur les chaînes qui sont déjà terminées par \0. Sinon, il ne connaît pas pour ajouter la deuxième chaîne. Dans votre cas a[0] n'est pas terminée, la fonction induira un comportement indéfini. Vous pouvez effectuer les opérations suivantes à la place:

a[0][n] = '\0'; 

(le même est pour le reste des éléments a)

+0

Aussi '' \ 0 "' n'est pas la même chose que ''\ 0''. – alk

+0

@alk Vous voulez dire que '" \ 0 "' sera en fait * deux * zéros? –

+0

Oui! -) Deux fois plus de mémoire! Un tableau, un 'char [2]' pas un 'char'. – alk