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