1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
/*permet de stocket les blocs de caractère le buff dans le tableau de char* argv*/
int test(char* buff, char** argv){
char* buff2=malloc(1); /*stocke temporairement un block de caractere*/
int i=0; /*position dans buff*/
int j=0; /*taille de argv*/
int stop=0; /*indique la fin de la chaine buff*/
while(!stop){
/*On recupere le premier bloc de caractere*/
while(buff[i]!=' ' && buff[i]!='\0'){
buff2=realloc(buff2, strlen(buff2)+2);
sprintf(buff2, "%s%c", buff2, buff[i]);
i++;
}
/*si lz bloc n'est pas vide on le stocke dans argv*/
if(strlen(buff2)>0){
argv=realloc(argv, (j+1)*sizeof(char*));
argv[j]=malloc(strlen(buff2)+1);
strcpy(argv[j], buff2);
j++;
}
/*on se déplace dans buff tant qu'on a des espaces*/
while(buff[i]==' ') i++;
if(buff[i]=='\0'){
stop=1;
printf("STOP\n");
}
/*on reinitialise buff*/
buff2=realloc(NULL, 1);
strcpy(buff2, "\0");
}
/*1er affichage de argv*/
for(i=0; i<j; i++){
printf("%s\n", argv[i]);
}
return j;
}
main(){
char** argv=malloc(sizeof(char*));
int j=test("aa b", argv);
int i;
for(i=0; i<j; i++){
printf("%s\n", argv[i]);
}
return 0;
} |
Partager