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

  FORUM HardWare.fr
  Programmation
  C

  scanf et pointeur de chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

scanf et pointeur de chaine

n°583369
rosminet
Posté le 04-12-2003 à 21:50:42  profilanswer
 

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

mood
Publicité
Posté le 04-12-2003 à 21:50:42  profilanswer
 

n°583371
Taz
bisounours-codeur
Posté le 04-12-2003 à 21:52:50  profilanswer
 

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

n°583372
schnapsman​n
Zaford Beeblefect
Posté le 04-12-2003 à 21:54:57  profilanswer
 

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!"
n°583373
rosminet
Posté le 04-12-2003 à 21:55:07  profilanswer
 

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?

n°583376
schnapsman​n
Zaford Beeblefect
Posté le 04-12-2003 à 21:57:02  profilanswer
 

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!"
n°583377
rosminet
Posté le 04-12-2003 à 21:58:55  profilanswer
 

donc je suis obligé de definir une taille precise c ca qui m'embette en fait  

n°583380
Taz
bisounours-codeur
Posté le 04-12-2003 à 22:00:53  profilanswer
 

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

n°583383
rosminet
Posté le 04-12-2003 à 22:03:22  profilanswer
 

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

n°583388
Konar
Posté le 04-12-2003 à 22:04:38  profilanswer
 

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 !

n°583389
schnapsman​n
Zaford Beeblefect
Posté le 04-12-2003 à 22:05:56  profilanswer
 

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!"
mood
Publicité
Posté le 04-12-2003 à 22:05:56  profilanswer
 

n°583391
rosminet
Posté le 04-12-2003 à 22:11:41  profilanswer
 

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
n°583392
schnapsman​n
Zaford Beeblefect
Posté le 04-12-2003 à 22:14:28  profilanswer
 

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!"
n°583401
rosminet
Posté le 04-12-2003 à 22:20:17  profilanswer
 

SchnapsMann a écrit :


 
et alors, rien à battre  :o  


ok je vous emerderez plus :kaola:

n°583447
Taz
bisounours-codeur
Posté le 04-12-2003 à 23:36:54  profilanswer
 

 while(!sortir)
    {
      printf("Commande>" );
      scanf("%s",&cmd);
      printf("%s\n", cmd);
      sortir=verifCMD(cmd);
    }
 
do {} while(!verifCMD(cmd)); en somme

n°583608
ffluff
Challenge Everything
Posté le 05-12-2003 à 10:18:45  profilanswer
 


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
n°583731
Taz
bisounours-codeur
Posté le 05-12-2003 à 12:15:39  profilanswer
 

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

n°583735
black_lord
Truth speaks from peacefulness
Posté le 05-12-2003 à 12:20:55  profilanswer
 

lib readline

n°583736
rosminet
Posté le 05-12-2003 à 12:21:30  profilanswer
 

merci mais g reussi d'une autre facon plus simple

n°583738
Taz
bisounours-codeur
Posté le 05-12-2003 à 12:22:48  profilanswer
 

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


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

  scanf et pointeur de chaine

 

Sujets relatifs
[Borland] Récupérer une chaine de char contenue dans une listboxImpossible de localiser une chaine pourtant existante
Positionner un pointeur dans un fichier en fonction d'une variableconversion de chaine a numerique
"Splitter" une chaine en mots...[php/mysql] Tester une chaine different de vide
Passage de pointeur de fonction membre à une fonctionConvertir chaine > constante...
virer les espaces apres une chaine ......Problème (surrement très con) pour passer une chaine en paramètre.
Plus de sujets relatifs à : scanf et pointeur de chaine


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