Mes pitites lignes de code sont-elles sûres jusqu'à présent ?
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:
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:
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:
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:
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?