Bonsoir,
Je cherche a faire un petit programme qui fait un read sur l'entrée standard, récupère ce qu'on écrit dans un char *, jusqu'a tomber sur un '/n' (lorsqu'on appuie sur la touche entrée), et renvoie 0.
Seulement je veux faire quelque chose de dynamique, qui pourrait fonctionner avec un buffer d'une taille plus petite que la taille des arguments qu'on lui donne, en faisant plusieurs read, et pour se faire j'ai besoin de déclarer des static char*, et ca, je ne maitrise pas du tout...
Voici donc un code qui illustre comment je vois les choses (qui ne compile pas), merci pour vos explications !
.get_next_line.h
.get_next_line.c
.main.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifndef __GET_NEXT_LINE_H__ # define __GET_NEXT_LINE_H__ #define BUFF_SIZE 1 typedef struct s_test { static char *result; } t_test; int get_next_line(const int fd, t_test *ptr); void my_putstr(char *str); int my_strlen(char *str); #endif /*__MY_GET_NEXT_LINE__ */
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdlib.h> #include <unistd.h> #include "get_next_line.h" void my_malloc(static char *(*result), int debut, char *buffer, int fin) { int i; i = debut; while ((buffer[debut] != '\n') && (debut < fin)) debut++; if (buffer[debut] == '\n') *result = malloc(((debut - i) + 1) * sizeof(*(*result))); else *result = malloc((debut - i) * sizeof(*(*result))); } int get_next_line(const int fd, t_test *ptr) { char buffer[BUFF_SIZE]; static int debut = 0; static int j = 0; static int fin; if (debut == 0 || debut == fin) fin = read(fd, buffer, BUFF_SIZE); my_malloc(&(ptr->result), debut, buffer, fin); while ((buffer[debut] != '\n') && (debut < fin)) { ptr->result[j] = buffer[debut]; j++; debut++; } if (buffer[debut] == '\n') { ptr->result[j] = '\0'; return (0); } else return (-1); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include "get_next_line.h" int my_strlen(char *str) { int i; i = 0; while (str[i]) i++; return (i); } void my_putstr(char *str) { write(1,str,my_strlen(str)); } int main() { t_test args; while (get_next_line(0, &args) != 0) get_next_line(0, &args); return (0); }
Partager