Char [10] dans char [16][10]

cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011 - 15 avril 2011 à 09:14
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 26 avril 2011 à 13:45
Bonjour à tous,
Je m'explique j'ai un char buffer[10] que je voudrais mettre dans un char temp[16][10]
car je vais devoir mettre 16 fois buffer[10] dans le char temp[16][10].
Comment dois-je proceder ?
Cordialement.

42 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 10:28
Une simple copie. (Ou simplement pointer dessus, mais je vais considérer que tu veux copier)

char buffer[10] = ....
char temp[16][10] = ....

strncpy(temp[0], buffer, 10); /* Dans la première case */
strncpy(temp[1], buffer, 10);
...
strncpy(temp[15], buffer, 10);  /* Dans la dernière case */


Évidemment, tu peux aussi faire une boucle plutôt que d'écrire 16 fois la ligne. Mais j'ai du mal à en voir l'intérêt...

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 10:34
Je vais mieux m'expliquer, enfaite j'ai une boucle while(1) donc qui tourne à l'infinie
qui me permet de recevoir quelque chose que je stock dans buffer[10] et donc je voudrais stoker 16 fois la valeur buffer[10]
est-ce plus clair ?
Je vais essayer votre code merci
Cordialement
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 10:36
Ok, je comprends mieux. Ce n'est pas le même contenu à chaque fois.

Plutôt que de stocker dans buffer, stocke alors directement dans temp[i], ça sera mieux, non ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 10:41
Non car enfaite ce sont des trames chaque trames a une en-tête : ffffffff, ffffffff
donc je fais un if(buffer[6]!='f' && buffer[7]!='f') pour voir l'en-tête et je veux prendre ce qu'il y a entre chaque en-tête et il peux y avoir jusqu'à 14 valeurs différentes c'est pour sa que buffer[10] contient ffffffff ou 0e et je veux stoker a chaque fois est-ce plus clair ?
Cordialement.
0

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

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 10:49
Très clair. Je comprends ton approche.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 10:51
J'ai aussi oublier de préciser que char buffer[10] c'est enfaite char* buffer[10]
et donc strncpy ne fonctionne pas désolé.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 10:58
char* buffer[10] c'est en fait un tableau contenant des tableaux, tout comme temp[16][10]

Si tu as la dimension de *, alors je peux t'aider.
Je m'explique:
char temp[16][10] veut dire que tu as un tableau de 16 éléments, contenant dans chacunes de ces cases un tableau de 10 éléments.
char* buffer[10] veut dire que tu as un tableau de 10 éléments, contenant dans chacunes de ces cases un tableau de taille non déterminée.

Bien évidemment si c'est terminé par un 0 terminal, alors tu as indirectment la taille de la chaîne. Et à ce moment là le code devient:
strncpy(temp[0], buffer[0], 10); /* Attention, par sécurité, j'ai mis une limite de 10,
car la taille de ton buffer recevant est de 10, mais si ta chaîne est plus grande, elle sera tronquée. */


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 11:01
Comment sa si j'ai la dimension de *?
Merci de ton aide elle mes vraiment utile
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 11:13
char[][] est un tableau à deux dimensions fixes.
char*[] est un tableau à deux dimensions, dont l'une fixe et l'autre variable.
char** est un tableau à deux dimensions variables.

Dans le cas de char*[10], tu as une dimension de 10 et une dimension variable. Quelle est la dimension de * (la partie variable) ?

A noter que si c'est une chaîne de caractère, la dimension est obtenable par le 0 terminal, et donc on s'en fout :p
(cf mon exemple précédent).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 11:30
Comment sa obtenable par le 0 terminal ?
Je dois passer pour un idiot désolé.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 11:41
Taille de char[10] => 10
Taille de char[20] => 20
etc...

Taille de char* ? Inconnu, sauf s'il y a un 0 terminal.
Ex: char* t "toto"; équivaut à char* t {'t', 'o', 't', 'o', 0} => taille de 4 (5 éléments dans le tableau).
Obtenable aussi par strlen(t) => 4.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 11:42
D'accord je vais tester sa et voir ...
Je vous retiens au courant .
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
15 avril 2011 à 11:44
Voici la valeur dans un char buffer :ffffffff
8Voici la valeur dans un char buffer :ffffffff
8Voici la valeur dans un char buffer :0e
2Voici la valeur dans un char buffer :44
2Voici la valeur dans un char buffer :50

Voici le résultat de cout<<strlen(buffer);
Ce sera tout le temps : 8,8,2,2,2,...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 avril 2011 à 11:49
Ok, il y a bien un 0 terminal, donc la dimension n'est pas importante, tu peux reprendre l'exemple donné en dernier. Il devrait fonctionner.

PS: Si tu fais du C++, Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
18 avril 2011 à 15:15
Bonjour après avoir essayer votre réponse le résultat donner lors de la compilation est:
Description Resource Path Location Type
cannot convert ‘char**’ to ‘char*’ for argument ‘1’ to ‘char* strncpy(char*, const char*, size_t)’ main.cpp /Rs232 line 43 C/C++ Problem
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 avril 2011 à 15:18
Avec ceci ?
strncpy(temp[0], buffer[0], 10);


Je peux voir ton code ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
18 avril 2011 à 16:13
		MyCom.Recevoir(Nb,pChaine);
o=sprintf (buffer, "%.2x", pChaine[0]);
cout<<"Voici la valeur dans un char buffer :"<<buffer<<"\n";
//cout<<" Voila buffer[0] "<<buffer[0]<<" Voila buffer[1] "<<buffer[1]<<" Voila buffer[2] "<<buffer[2]<<" Voila buffer[3] "<<buffer[3]<<" Voila buffer[4] "<<buffer[4]<<" Voila buffer[5] "<<buffer[5]<<" Voila buffer[6] "<<buffer[6]<<" Voila buffer[7] "<<buffer[7]<<" Voila buffer[8] "<<buffer[8]<<" Voila buffer[9] "<<buffer[9]<<" Voila buffer[10] "<<buffer[10];
cout<<"Voici la valeur de strlen(buffer) :"<<strlen(buffer)<<'\n';
if(buffer[6]!='f' && buffer[7]!='f')
{
//cout<<"trop bien \n";
strncpy(temp[0],buffer[0],10);
}
buffer[6]='\o';
buffer[7]='\o';


Voici mon code :)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 avril 2011 à 16:18
Tu peux poster la définition/déclaration de temp et de buffer, et je pourrais t'aider :)

PS: Attention j'ai l'impression que tu fais '\o' au lieu de '\0'. Le mieux étant de mettre 0 (0 == NULL == '\0')

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_Stutu Messages postés 37 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 26 avril 2011
18 avril 2011 à 16:38
Pas de problème =)
int main (void)

{
system("clear");
system("echo Connecté en tant que $USER");
cout<<endl<<endl;
tRs232 MyCom(usbcom,BPS9600,BIT8,PAS_DE_PARITE,STOP1);
int Nb=1;
char pa;
char* pChaine;
char* buffer;
buffer = new char [10];
char* temp[16][10];
int a=0,b=0;
int i=0;
int o=0;
pChaine=&pa;
string test[500];

while (1)
{
MyCom.Recevoir(Nb,pChaine);
o=sprintf (buffer, "%.2x", pChaine[0]);
cout<<"Voici la valeur dans un char buffer :"<<buffer<<"\n";
//cout<<" Voila buffer[0] "<<buffer[0]<<" Voila buffer[1] "<<buffer[1]<<" Voila buffer[2] "<<buffer[2]<<" Voila buffer[3] "<<buffer[3]<<" Voila buffer[4] "<<buffer[4]<<" Voila buffer[5] "<<buffer[5]<<" Voila buffer[6] "<<buffer[6]<<" Voila buffer[7] "<<buffer[7]<<" Voila buffer[8] "<<buffer[8]<<" Voila buffer[9] "<<buffer[9]<<" Voila buffer[10] "<<buffer[10];
cout<<"Voici la valeur de strlen(buffer) :"<<strlen(buffer)<<'\n';
if(buffer[6]!='f' && buffer[7]!='f')
{
//cout<<"trop bien \n";
strncpy(temp[0],buffer[0],10);
}
buffer[6]='\0';
buffer[7]='\0';
}
return 0;
}


Voilà en tout cas je te remercie beaucoup
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
18 avril 2011 à 16:41

char* buffer;
char* temp[16][10]; // Pourquoi char* et pas juste char ?


Techniquement c'est ça:
strncpy(temp[0][0],buffer,10);

Fonctionnellement, je ne suis pas sur que ce soit ce que tu recherches.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous