Bleme avec la commande strncpy

FeetloveR666 Messages postés 3 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 novembre 2003 - 15 nov. 2003 à 12:42
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 16 nov. 2003 à 00:29
Salut a tous,

Bon voila g un soucy avec la commande strncpy permattant d'extraire une parti d'un chaine de caratère ( exos demander en tp )

D'apres ce que g compris ds strnpcy( ch1 , ch2 , i );

ch1 et la chaine extraite de ch2 et i et le nbr de caractère extrait ( juske la g bon?? )

Mon probleme est que lors de l'extraction de i caratere je me retrouvre soit avec la chane complete soit avec le(s) caratere(s) voulu plus d'autres bien souvent n'etant mm pas ds la chaine principale ( ch2 )

Dc si qqu'un peux m'aider la dedans ça serais cool :)
Merci d'avance @pluche

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 nov. 2003 à 12:50
Va donc voir ce qu'en dit MSDN, c'est generalement ainsi q'il faut commencer et on gagne du temps.
BruNews, ciao...
0
FeetloveR666 Messages postés 3 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 novembre 2003
15 nov. 2003 à 15:53
Oki merci mais c koi MSDN ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 nov. 2003 à 16:05
Une bible de la prog qui devrait se trouver sur ton PC si tu bosses sur Windows.
Consultable a partir de:
http://www.msdn.microsoft.com/library/default.asp
BruNews, ciao...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 nov. 2003 à 23:42
Dans la fonction strncpy(ch1, ch2, n), n n'est pas le nombre de caractères à recopier mais le nombre max que tu pourras recopier (taille du buffer ch1).
La recopie s'arrête dès que la fin de ch2 est trouvé (caractère nul) ou dès que n caractères ont été copié. Ensuite, un caractère nul est ajouté à la fin de ch1 pour marquer la fin de la chaîne. Mais si n est inférieur à la taille de la chaîne ch2, ch1 ne sera pas terminée par un caractère nul. C'est pour cela que dans certain cas tu trouve des caractères bizarre à la fin (qui correspondent à ce qui se situe après le buffer ch1 en mémoire.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FeetloveR666 Messages postés 3 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 novembre 2003
16 nov. 2003 à 00:07
Oki g a peu pres compris le principe de strncpy();
En reprennant ce que tu as dis si ch2 est plus grand que ch1 n est qd mm le nbr de caractaire que tu veux extraire puisque tu dis " ou dès que n caractères ont été copié ".

En fait le principe de l'exos est de faire une calculette " tres simplifié " on doit saisir le calcul a faire ds une chaine ( par exemple 2+3 ) et dc apres d'extraire les 3 parties ( 2 , + , 3 )
avec strncpy(); afin de faire le calcul par la suite.

Dc pour cela g d'abord determiner la position de signe ( dc ici + )

int i=0;
while( ch[i] != '+' ) //bien sur ds lexos y a aussi - , *, /
{
i++
}

Dc i prend la valeur de l'indice de i

g dc fais pour extraire la premiere partie

strncpy( ch1,ch2,i); //ici etant a l'indice 1 il y a 1seul caratere a extraire

mais malgré ça je retrouve ds ch1 des caratere en plus et + le nbr de caratere a extraire est grand + il y a de caratere non desirer ( qd c pas ch2 encore en plus )

Voila si ça a pu t'eclairer sur mon soucie ^^

Je precise qd mm que je ne demande pas que l"on me donne le code source pour faire cette calculette je souhaite juste trouver un soluce avec cette fonction

Merci d'avance :)
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
16 nov. 2003 à 00:29
strncpy ne sert pas à extraire une partie de la chaîne mais à recopier toute la chaine. Le paramètres N sert simplement à indiquer la taille du buffer destination afin de ne pas "écraser" ce qu'il y a après le buffer si il est trop petit pour contenir ch2.

qand tu fais strncpy(ch1, ch2, 1), tu indique à la fonction que le buffer ch1 ne peut contenir qu'un seul caractère. La fonction recopira donc le premier caractère de ch2 puis s'arrêtera. Cela te semble bon MAIS en C, les chaînes de caractères se terminent par un caractères nul '\0'. comme celui-ci n'a pas été rajouté par la fonction strncpy, quand tu voudr afficher ch1, il n'y aura pas qu'un seul caractère d'affiché mais aussi tous ceux qui se situent après jusqu'au premier caractère nul qui peut se situer n'importe où en mémoire.

pour rechercher la présence d'un caractère dans une chaîne :
char* pChar = strchr(ch, '+');
si pChar est égal à NULL, le caractère n'est pas dans la chaine ch, sinon, pChar pointe sur le premier caractère trouvé.

Ensuite, pour extraire une partie de la chaîne ch1, repère par 2 indices i et j le premier et le dernier caractère à recopier puis:

1) recopier dans ch2 la fin de ch1:
strcpy(ch2, ch2 + i);

2) terminer la chaîne ch2 :
ch2[j-i] = '\0';
0
Rejoignez-nous