impossible de faire un switch sur un char*

impossible de faire un switch sur un char* - C++ - Programmation

Marsh Posté le 21-03-2003 à 09:23:03    

Code :
  1. char* token = (char*)malloc(256);
  2. char seps[]   = "/\r";
  3. char str[2048];
  4. //initialisation de str
  5. token =  strtok(str, seps );
  6. switch(*token) //token
  7.  case "STA":
  8.   {
  9.    //traitement
  10.   }
  11.  //suite


 
a la compilation (sur la ligne case "STA":) :  
error C2051: case expression not constant
 
Est ce que je me suis trompe ou alors est il tout simplement impossible de faire un switch sur le contenu d'un char* ?
 
Merci

Reply

Marsh Posté le 21-03-2003 à 09:23:03   

Reply

Marsh Posté le 21-03-2003 à 09:28:55    

Il me semble en effet qu'en C le switch/case ne fonctionne que sur des nombres....donc il faut que tu travailles a base de if/else if. A confirmer.

Reply

Marsh Posté le 21-03-2003 à 09:30:33    

Oui, en effet...
 
On peut faire un switch soit sur un char, soit sur un int
mais pas sur un char *, ni sur un string
 
C'est dans certains cas bien dommage...
 
kason
 
:hello:


---------------
Seul le calme paisible d'un lac peut endiguer la force furieuse d'un torrent.
Reply

Marsh Posté le 21-03-2003 à 09:31:29    

"char * == char *" ca compare les addresses, pas le contenu
 
Fo attaquer ca a l'if/else a grand coup de strcmp(...)==0


Message édité par chrisbk le 21-03-2003 à 09:32:03
Reply

Marsh Posté le 21-03-2003 à 09:31:52    

KSauzeRK a écrit :

Il me semble en effet qu'en C le switch/case ne fonctionne que sur des nombres....donc il faut que tu travailles a base de if/else if. A confirmer.


 
oui, c'est ce qu'il disent dans l'aide. Mais etant donne que ca fonctionne avec les char, je pensais que ca pouvait peut etre aussi fonctionner avec le contenu d'un char*
 
En route pour une belle boucle de if/ else if alors.

Reply

Marsh Posté le 21-03-2003 à 09:32:45    

chrisbk a écrit :

"char * == char *" ca compare les addresses, pas le contenu
 
Fo attaquer ca a l'if/else a grand coup de strcmp(...)==0


 
Ce qui m'interesse est de comparer le contenu malheureusement
 
EDIT : j'ai meme essaye avec des strcmp dans mon case mais sans resultat
 case (strcmp(token,"STA" ))==0):


Message édité par polo021 le 21-03-2003 à 09:33:42
Reply

Marsh Posté le 21-03-2003 à 09:34:24    

polo021 a écrit :


 
Ce qui m'interesse est de comparer le contenu malheureusement
 
EDIT : j'ai meme essaye avec des strcmp dans mon case mais sans resultat
 case (strcmp(token,"STA" ))==0):


 
oui mais la tu respecte pu trop la grammaire du case :d

Reply

Marsh Posté le 21-03-2003 à 09:39:20    

chrisbk a écrit :


 
oui mais la tu respecte pu trop la grammaire du case :d


[:spamafote]  
 
 :jap:

Reply

Marsh Posté le 21-03-2003 à 09:40:13    

Si tu as un grand nombre de chaines tu peux faire du hachage
(transformer tes chaines en nombre).
 
Si tu as un seul cas à traiter un if strcmp else c'est largement suffisant comme ca..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 21-03-2003 à 09:57:20    

legreg a écrit :

Si tu as un grand nombre de chaines tu peux faire du hachage
(transformer tes chaines en nombre).
 
Si tu as un seul cas à traiter un if strcmp else c'est largement suffisant comme ca..
 
LeGreg


 
Non, ce n'est pas assez imposant que pour s'embarquer dans du hachage.
Merci quand meme pour l'idee.  

Reply

Marsh Posté le 21-03-2003 à 09:57:20   

Reply

Marsh Posté le 22-03-2003 à 07:48:24    

En C/C++ switch est limité. IL ne marche qu'avec:
 
1) Des entiers.
Anciennement des flottants aussi, mais c'est déprécié.
(A ce stade-là on pourrait encore caster en bon gros bourrain)
 
2) Des valeurs de "case" constante de compilation.
Ce n'est malheureusement pas le cas de adresses, ou du résultat d'un typeid en C++.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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