Se connecter avec
S'enregistrer | Connectez-vous

[C++]Fonction strncpy - strncat

Dernière réponse : dans Programmation

Coucou tout le monde, J'ai utiliser strcat (pour faire une concaténation d'une chaine de caractère avec un autre) mais disons que la fonction strcat s'arrête au 0 terminal...

J'ai alors tenter avec la fonction strncpy mais le probleme, c'est que lorsqu'il rencontre des caractères bizar ou pour une sombre raison, il arrête la copie de la chaine de caractère...
Du coup, au lieu d'avoir 20 caractère, j'en ai que les 8 premiers... (le reste, c'est des 0)

Donc, je souhaiterai ne pas utiliser ses fonctions car apparement, on ne peut pas s'y fier...
Qq'un aurait il une idée ?

(j'ai tenter avec une boucle for)
reproduction de la fonction strcat donc, ya une boucle :

  1. char buffer2[5000]
  2. int taillebuffer2=0;
  3. while (condition)
  4. {
  5. for (int i=0;i < taillebuffer1;i++)
  6. {
  7. buffer2[taillebuffer2+i]=buffer1[i];
  8. }
  9. taillebuffer2=taillebuffer2+taillebuffer1;
  10. }


Lorsque je compile, j'ai une erreur avec la zone mémoire de buffer1 ou 2... (sans doute que j'ai fait le buffer2 trop ptit ou autre qui fait que ça tente de rentré plus d'info que la mémoire de buffer2 ne peut supporter...
Qq'un pourrai til m'aider ?

Autres pages sur : fonction strncpy strncat

Lassé par la pub ? Créez un compte

Salut !
A priori la fonction strncpy marche très bien, elle est utilisée un peu partout depuis belle lurette. Donc si elle arrête la copie après 8 caractères, c'est qu'elle rencontre un caractère nul... quelle longueur as-tu passée en paramètre ?
Sinon pour ta solution alternative, je pense que le problème est que tu copies tout le buffer1 à chaque fois, sans t'arrêter au caractère nul. Donc si ton buffer1 fait aussi 5000 mais ne contient que 50 "vrais" caractères par exemple, ton buffer2 sera plein dès la première copie... d'où le débordement mémoire !
En tous cas je pense que tu ferais mieux d'utiliser strncpy, qui a fait ses preuves. Si ça ne fonctionne pas, c'est probablement que tu ne l'utilises pas de la bonne manière.

[EDIT] j'y pense tous d'un coup, est-ce que ton buffer1 ne serait pas déclaré en char* ? si c'est le cas, et que tu passes sizeof(buffer1) comme longueur à strncpy, c'est la taille du pointeur qui est passée, soit 8 octets si tu es en 64 bits...

Pour mon pb, j'ai réussi à le résoudre en ajoute +1 dans les parametres...

Sinon, euh, bah, disons que dans mes données, j'ai un 0 terminal aussi... et c'est ça que j'ai voulu copier : voilà pourquoi j'en ai besoin dans mon cas et j'ai pas dit qu'elle ne fonctionnait pas...
J'ai juste dit qu'elle ne correspondait pas à mes besoins :) 
Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :
Tom's guide dans le monde