C : Mettre une valeur numérique dans un const char

C : Mettre une valeur numérique dans un const char - C - Programmation

Marsh Posté le 03-05-2006 à 15:41:06    

Bonjour à tous,
 
Voilà mon problème :  
 
J'utilise un logiciel de test qui se scripte en C.
Une des fonction utilisée fait appel à un const char.
 
Je voudait rendre ce const char variable ( :pt1cable: )
 
Voilà comment ça se présente :  
 
 

Code :
  1. const char *p;
  2. int i;
  3. int j;
  4. for(j=0; j<8; j++) {
  5. p = la valeur de j
  6. sapgui_table_set_text("(0, 'Article')", 
  7.  tblSAPMV45ATCTRL_U_ERF_AUFTRAG4,
  8.  p,
  9.  "3",
  10.  "{Article}",
  11.  BEGIN_OPTIONAL,
  12.   "AdditionalInfo=sapgui108",
  13.  END_OPTIONAL);
  14. }


 
Est-ce que c'est possible?
 
Comment faire alors?
 
Merci!!


Message édité par lool38 le 03-05-2006 à 15:47:32
Reply

Marsh Posté le 03-05-2006 à 15:41:06   

Reply

Marsh Posté le 03-05-2006 à 15:42:58    

que dit la définition de const ?
 
Merci de mettre des balise [ code ] pour rendre ton code lisible stp.

Reply

Marsh Posté le 03-05-2006 à 15:46:44    

Voilà pour les balises ;)
 
Il faut te dire que l'outils que j'utilise génère le code C seul.
J'ai adapté à mes besoins (par exemple la boucle sur j)
Je n'y connais pas grand chose en C aussi je ne vois pas trop ce que veux dire ta question.
 
C'est moi qui ai défini p par le const char *p
Tout ce que je sais, c'est que ce p que l'on retrouve dans la fonction sapgui_table_set_text doit être de type const char!

Reply

Marsh Posté le 03-05-2006 à 15:48:00    

je t'aide:
(de http://mapage.noos.fr/emdel/init_c.htm )

Citation :

Le qualificateur const signifie que la fonction accepte l'adresse d'une chaine non modifiable, car elle s'engage à ne pas modifier la chaine pointée, ni à passer son adresse à une fonction qui pourrait la modifier.

Reply

Marsh Posté le 03-05-2006 à 15:48:18    

Déclare:
> const char *p=...;
à l'intérieur de ta boucle.

Reply

Marsh Posté le 03-05-2006 à 15:53:41    

nargy a écrit :

Déclare:
> const char *p=...;
à l'intérieur de ta boucle.


 
Oui, ce pourrait être une solution mais j'aimerais que p=j
soit p=0 puis p=1 etc... comme l'incrément j!
 
Que mettre alors pour const char *p= ???

Reply

Marsh Posté le 03-05-2006 à 16:08:33    

:??:

Reply

Marsh Posté le 03-05-2006 à 16:10:36    

char buffer[64];
snprintf(buffer,sizeof(buffer),"%d",j);
 
sapgui_table_set_text( ............., buffer, ............ );
 

Reply

Marsh Posté le 03-05-2006 à 16:12:45    

sinon, si tu est sûr que j va que de 0 à 8:
 
char buf[2];
 
buf[0]='0'+j;
buf[1]=0;
 
sapgui_table_set_text( ............., buf, ............ );  
 

Reply

Marsh Posté le 03-05-2006 à 16:49:47    

bjone a écrit :

char buffer[64];
snprintf(buffer,sizeof(buffer),"%d",j);
 
sapgui_table_set_text( ............., buffer, ............ );


 
 :bounce:  
Ca marche!
Je ne comprends pas comment mais ça fonctionne!
 
Un super grand merci :jap:

Message cité 1 fois
Message édité par lool38 le 03-05-2006 à 16:50:46
Reply

Marsh Posté le 03-05-2006 à 16:49:47   

Reply

Marsh Posté le 03-05-2006 à 17:01:00    

lool38 a écrit :


Je ne comprends pas comment mais ça fonctionne!


snprintf() a converti une valeur numérique en sa représentation décimale sous la forme d'une chaine de caractères contenue dans un tableau de char. L'adresse du premier élément du tableau a été transmise à la fonction.
 
Par contre, tu m'inqiuètes quand d'une part tu dis "je ne connais pas grand chose au C", et que d'autre part tu manipules du code C. Il faut s'attendre à féter dignement les 20 ans de Chernobyl ? Ou à ce que quelques avions se crashent en Mer Noire ?


Message édité par Emmanuel Delahaye le 03-05-2006 à 22:14:37

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-05-2006 à 17:06:58    

ce que ta fonction attends, c'est une chaine représentant un entier.
 
il te faut donc une chaine : un tableau de caractères assez grand (char buffer[64] par exemple);
 
ensuite il faut que de ton entier, tu généres la chaine de caractères le réprésentant, snprintf(buffer,sizeof(buffer),"%d",j);  qui prends l'entier j le traite et génère la chaine de caractère le représentant, et stockes ces caractères dans la chaine buffer, de taille maximale sizeof(buffer).  
 
ensuite tu appelles ta petite fonction, qui attends dans un de ses paramètres, un pointeur (char *) sur la chaine de caractère représentant l'entier.  
 
comme t'as dit darkalt3, le const est là pour dire que la chaine ne sera pas modifiée par sapgui.....


Message édité par bjone le 03-05-2006 à 17:08:14
Reply

Marsh Posté le 03-05-2006 à 17:22:02    

Effectivement, ça se clarifie.
 
Pour votre info, j'ai une utilisation hyper ponctuelle de ce soft générant du C. Et là, je bosse pour une maison d'édition alors au pire, vous aurez plus de bouquins merdiques en librairie :D
 
En tout cas, un grand grand merci!

Reply

Marsh Posté le 03-05-2006 à 19:16:18    

_darkalt3_ a écrit :

je t'aide:
(de http://mapage.noos.fr/emdel/init_c.htm )

Citation :

Le qualificateur const signifie que la fonction accepte l'adresse d'une chaine non modifiable, car elle s'engage à ne pas modifier la chaine pointée, ni à passer son adresse à une fonction qui pourrait la modifier.



 
c'est quoi le probleme ? la conversion 'char *' -> 'const char *' est valide, c'est dans l'autre sens que c'est interdit

Reply

Marsh Posté le 03-05-2006 à 19:46:54    

oui c'est pas ça mais lool 38ième du nom semblait vouloir utiliser directement un const char* en amont du passage du pointeur.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed