2016-02-04 3 views
-2

J'essaie de faire un simple exemple de code, dans lequel je peux avoir une sous-chaîne, dans une nouvelle chaîne.C - utiliser strchr inside memcpy

Mon code est ci-dessous:

char titulo[20]; 
char line[] = "PRINCIPAL,1.Liga,2.Clubes,3.Jogadores,4.Relatorios,5.Sair;"; 
char *pos = strchr(line,','); 

memcpy(titulo, line,*pos); 

Le problème, est que lorsque je fais:

printf("%s",titulo); 

je reçois quelque chose comme:

PRINCIPAL, 1.Liga, 2 .Clubes, 3.Jogadores, 4.Rela

+3

Que pensez-vous de passer '* pos' à' memcpy'? –

+0

Le memcpy prend un pointeur sur le tampon source comme second argument et la taille des données à copier comme troisième argument. Vous avez donc passé de mauvais paramètres. Vous devriez probablement être averti par le compilateur à ce sujet. – dmi

+0

Qu'est-ce que 'titulo'? Qu'est-ce que 'm'? Et avez-vous compilé avec tous les avertissements activés? –

Répondre

2

Parce que vous devez null terminer titulo. Exemple

char line[] = "PRINCIPAL,1.Liga,2.Clubes,3.Jogadores,4.Relatorios,5.Sair;"; 
char *pointer = strchr(line, ','); 
if (pointer != NULL) 
{ 
    char *substr; 
    size_t length; 
    length = pointer - line; 
    /* Perhaps check if `length == 0', but it doesn't matter 
    * because you would end up with an empty but valid sub string 
    * anyway. 
    */ 
    substr = malloc(length + 1); 
    if (substr != NULL) 
    { 
     memcpy(substr, line, length); 
     substr[length] = '\0'; 
     /* Use `substr' here */ 
     printf("%s\n", substr); 
     /* Don't forget to free */ 
     free(substr); 
    } 
} 
+0

Devrait être 'longueur = pointer-line + 1;', +1 parce que le tableau est indexé par zéro. – Lundin

+1

Cela inclurait le caractère délimiteur, une vérification de 'longueur == 0' serait préférable. –

+0

Vérifie ta réponse parce que ce qui me manquait était la ligne pointeur. comme je le fais ne pas besoin de longueur + 1. Pouvez-vous me dire pourquoi utilisez-vous malloc? J'ai vu cette référence lorsque je cherchais des réponses, mais je ne savais pas vraiment ce que ça faisait. –