Bonjour,
Etant débutant dans la programmation en C et apportant une importance toute particulière à l'efficacité et la sûreté de ce que j’entreprends, j'aimerais avoir votre avis sur ce petit programme, ne faisant rien de particulier à part récupérer une entrée utilisateur via une fonction que j'ai écrite, tout en utilisant des allocations dynamiques.
main.c
util.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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include "std.h" #include "util.h" /* #include "calc.h" */ #define SIZE 1024 int main(int argc, char** argv) { const size_t buffer_size = sizeof(char)*(SIZE+1); char* expr = (char*)calloc(buffer_size, sizeof(char)); char* input = (char*)calloc(buffer_size, sizeof(char)); if (argc > 1 && strlen(argv[1]) > 0) strcpy(expr, argv[1]); else { printf("Enter an expression: "); if (GetUserInput(input, buffer_size, '\n', 1)) strcpy(expr, input); else strcpy(expr, "0"); } if (expr != "0") { printf("Attempting to calculate '%s'\n", expr); /* CalcExpr(expr, buffer_size); */ } free(expr); free(input); return 0; }
util.h
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 #include "std.h" #include "util.h" unsigned short GetUserInput(char* buffer, const size_t s_buffer, char c_stop, unsigned short is_dynamic) { size_t i; char c; if (s_buffer > 0) { for (i = 0; i < s_buffer && (c = getchar()) != (c_stop ? c_stop : '\n'); ++i) { buffer[i] = c; } buffer[i] = '\0'; if (is_dynamic && i < s_buffer) return realloc((char*)buffer, sizeof(char)*(i+1)) ? 1 : 0; else return 1; } else return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #ifndef UTIL_H_INCLUDED #define UTIL_H_INCLUDED unsigned short GetUserInput(char* buffer, const size_t s_buffer, char c_stop, unsigned short is_dynamic); #endif
std.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #ifndef STD_H_INCLUDED #define STD_H_INCLUDED #include <stdio.h> #include <stdlib.h> #include <string.h> #endif
Merci d'avance
PS: Est-il possible de mettre des champs "spoiler" dans les messages?
Partager