Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
970 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  impossible de faire un switch sur un char*

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

impossible de faire un switch sur un char*

n°339370
polo021
Posté le 21-03-2003 à 09:23:03  profilanswer
 

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

mood
Publicité
Posté le 21-03-2003 à 09:23:03  profilanswer
 

n°339379
KSauzeRK
Posté le 21-03-2003 à 09:28:55  profilanswer
 

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.

n°339384
kason
Ab uno disce omnes
Posté le 21-03-2003 à 09:30:33  profilanswer
 

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.
n°339385
chrisbk
-
Posté le 21-03-2003 à 09:31:29  profilanswer
 

"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
n°339387
polo021
Posté le 21-03-2003 à 09:31:52  profilanswer
 

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.

n°339388
polo021
Posté le 21-03-2003 à 09:32:45  profilanswer
 

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
n°339393
chrisbk
-
Posté le 21-03-2003 à 09:34:24  profilanswer
 

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

n°339403
polo021
Posté le 21-03-2003 à 09:39:20  profilanswer
 

chrisbk a écrit :


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


[:spamafote]  
 
 :jap:

n°339406
LeGreg
Posté le 21-03-2003 à 09:40:13  profilanswer
 

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
n°339427
polo021
Posté le 21-03-2003 à 09:57:20  profilanswer
 

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.  

mood
Publicité
Posté le 21-03-2003 à 09:57:20  profilanswer
 

n°340298
Musaran
Cerveaulté
Posté le 22-03-2003 à 07:48:24  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  impossible de faire un switch sur un char*

 

Sujets relatifs
Impossible de lire une imageImpossible de faire une connection sur un applet IRC
Impossible WHERE noticed .....W3C validator + PHPSESSID ? Mission impossible ?
Classe dans un package et un autre non, accès impossible ?Image et texte dans une cellule: placement impossible... [resolu]
[PHP] opendir() impossible sur un lecteur réseauimpossible de lire un fichier texte avec kylix!!!!
Impossible de se connecter avec PHPmyadmin 2.2.6-EasyPHP[PHP] Passage de variables dans l'URL impossible ???
Plus de sujets relatifs à : impossible de faire un switch sur un char*


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR