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
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.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
 
#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;
}
util.h
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?