scanf et pointeur de chaine

scanf et pointeur de chaine - C - Programmation

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

Reply

Marsh Posté le 04-12-2003 à 21:50:42   

Reply

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

Reply

Marsh Posté le 04-12-2003 à 21:54:57    

Taz a écrit :


afficher un caractère
printf("%s\n",cmd[0]);
 
voire putchar(cmd[0]);  et autre fputc


 
tu voulais dire quoi en fait?


Message édité par schnapsmann le 04-12-2003 à 21:55:14

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 04-12-2003 à 21:55:07    

Taz a écrit :

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


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?

Reply

Marsh Posté le 04-12-2003 à 21:57:02    

rosminet a écrit :


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?


 
bah utilise une zonz mémoire correcte déjà, avec
un char cmd[512] par exemple.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

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  

Reply

Marsh Posté le 04-12-2003 à 22:00:53    

printf("%c\n",cmd[0]);
 
bordel.
 
man printf

Reply

Marsh Posté le 04-12-2003 à 22:03:22    

Taz a écrit :

printf("%c\n",cmd[0]);
 
bordel.
 
man printf


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

Reply

Marsh Posté le 04-12-2003 à 22:04:38    

SchnapsMann a écrit :


 
bah utilise une zonz mémoire correcte déjà, avec
un char cmd[512] par exemple.


 
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 !

Reply

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.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 04-12-2003 à 22:05:56   

Reply

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;
}


Message édité par rosminet le 04-12-2003 à 22:13:18
Reply

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  :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 04-12-2003 à 22:20:17    

SchnapsMann a écrit :


 
et alors, rien à battre  :o  


ok je vous emerderez plus :kaola:

Reply

Marsh 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

Reply

Marsh Posté le 05-12-2003 à 10:18:45    


char **tabCMD=(char **)malloc(sizeof(char *));


tu vas pas y mettre beaucoup de chose dans ton tabCMD...


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
Reply

Marsh Posté le 05-12-2003 à 12:15:39    

et tu peux me dire à quoi sert ton cast à la con ?

Reply

Marsh Posté le 05-12-2003 à 12:20:55    

lib readline

Reply

Marsh Posté le 05-12-2003 à 12:21:30    

merci mais g reussi d'une autre facon plus simple

Reply

Marsh Posté le 05-12-2003 à 12:22:48    

     printf("Commande>" );
      scanf("%s",&cmd);
 
sans fflush tu peux toujours courrir

Reply

Sujets relatifs:

Leave a Replay

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