scanf et pointeur de chaine - C - Programmation
Marsh Posté le 04-12-2003 à 21:52:50
et tu crois que c'est quoi une chaine ... 
 
afficher un caractère 
 
printf("%s\n",cmd[0]); 
 
voire putchar(cmd[0]);  et autre fputc
Marsh Posté le 04-12-2003 à 21:54:57
| Taz a écrit :   | 
 
 
tu voulais dire quoi en fait?
Marsh Posté le 04-12-2003 à 21:55:07
| Taz a écrit : et tu crois que c'est quoi une chaine ...  | 
 
en fait le probleme ne viens pas de l'affichage mais de l'acces puisque sur un test ou une affectation g la meme erreur g due oublié kekchose nan?
Marsh Posté le 04-12-2003 à 21:57:02
| rosminet a écrit :   | 
 
 
bah utilise une zonz mémoire correcte déjà, avec 
un char cmd[512] par exemple.
Marsh Posté le 04-12-2003 à 21:58:55
donc je suis obligé de definir une taille precise c ca qui m'embette en fait  
Marsh Posté le 04-12-2003 à 22:03:22
| Taz a écrit : printf("%c\n",cmd[0]);  | 
 
ca sert a rien de s'enerver et puis mon probleme c po le printf c 'acces a un caractere d'un pointeur de chaine
Marsh Posté le 04-12-2003 à 22:04:38
| SchnapsMann a écrit :   | 
 
 
je conseille 8192 ou 16384 a la place de 512, on sait jamais ! 
 
en fait avec qq define genre 
#define BUFFER     1024 
#define BIG_BUFFER 8192 
puis avec des char str[BIG_BUFFER] plein partout le proj, normalement on est paré pour faire un bon stage bien productif et hyper interessant, surtout pour ceux qui auront a continuer le proj par la suite !
Marsh Posté le 04-12-2003 à 22:05:56
| rosminet a écrit : donc je suis obligé de definir une taille precise c ca qui m'embette en fait   | 
 
en joant avec les formats du genre 
%512s 
tu peux définir une taille à ne pas dépasser, à utiliser avec la taille de ton buffer. 
 
sinon sur gnu t'as moyen de dire à scanf d'allouer lui même le buffer, mais c'est pas ansi.
Marsh Posté le 04-12-2003 à 22:11:41
bon ca ca passe mais après je passe ma chaine dans une fonction comme ca: 
int main(void) 
{  
  //booleen 
  int sortir=0; 
  char cmd[512]; 
  
  //recuperation de la variable d'environement PATH 
  char *path=getenv("PATH" ); 
   
  while(!sortir) 
    { 
      printf("Commande>" ); 
      scanf("%s",&cmd); 
      printf("%s\n", cmd); 
      sortir=verifCMD(cmd); 
    } 
   
} 
 
int decoupageChaine(char *commande, char *chaine) 
{ 
  int i=0,z,y; 
  char *tmp; 
   
  while(commande[i]!=0) 
    { 
      if(commande[i]!=' ') 
 { 
   printf("decoupage%s\n",commande[0]); 
   chaine[i]=commande[i]; 
   i++; 
 } 
      else 
 { 
   chaine[i]='0'; 
   i++; 
   for(z=i,y=0;z<strlen(commande);z++,y++) 
     { 
       tmp[y]=commande[z]; 
     } 
   tmp[y]=0; 
   strcpy(commande,tmp); 
   return 0; 
 }   
    } 
  chaine[i]=0; 
  return -1; 
} 
//extern char *path; 
int verifCMD(char *commande) 
{ 
  int pos=-1,i=0; 
  char *chaine; 
 
  char **tabCMD=(char **)malloc(sizeof(char *)); 
  //decoupage des arguments de la commande dans tabCMD 
  while(decoupageChaine(commande,chaine)!=-1) 
    { 
      printf("boucle\n" ); 
      printf("%s",chaine); 
      *(tabCMD+i)=chaine; 
      i++; 
    } 
  return 0; 
}
Marsh Posté le 04-12-2003 à 22:14:28
| rosminet a écrit : bon ca ca passe mais après je passe ma chaine dans une fonction comme ca:  | 
 
 
et alors, rien à battre   
 
Marsh Posté le 04-12-2003 à 22:20:17
ReplyMarsh Posté le 04-12-2003 à 23:36:54
  while(!sortir) 
    { 
      printf("Commande>" ); 
      scanf("%s",&cmd); 
      printf("%s\n", cmd); 
      sortir=verifCMD(cmd); 
    } 
 
do {} while(!verifCMD(cmd)); en somme
Marsh Posté le 05-12-2003 à 10:18:45
|   | 
 
tu vas pas y mettre beaucoup de chose dans ton tabCMD...
Marsh Posté le 05-12-2003 à 12:22:48
      printf("Commande>" ); 
      scanf("%s",&cmd); 
 
sans fflush tu peux toujours courrir
Marsh Posté le 04-12-2003 à 21:50:42
Bonsoir
j'ai un probleme de manipulation de pointeurs de chaines:
char *cmd;
scanf("%s",cmd);
printf("%s\n",cmd); //ca fonctionne
printf("%s\n",cmd[0]); ///ca marche pas
k1k1 sais pourquoi ca me fait un segmentation fault?
merci