13.7.1 Programme simple en C (gcc
)
Un exemple simple pour compiler example.c
avec la biblioth�que
libm
dans l'ex�cutable run_example
:
$ cat > example.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(int argc, char **argv, char **envp){
double x;
char y[11];
x=sqrt(argc+7.5);
strncpy(y, argv[0], 10); /* emp�che un d�passement de tampon */
y[10] = '\0'; /* remplissage pour �tre s�r que la cha�ne finit
par '\0' */
printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
return 0;
}
EOF
$ gcc -Wall -g -o run_example exmple.c -lm
$ ./run_example
1, 2.915, ./run_exam, (null)
$ ./run_example 1234567890qwerty
2, 3.082, ./run_exam, 1234567890qwerty
Ici, -lm est n�cessaire pour lier la biblioth�que
libm, pour utiliser sqrt(). La biblioth�que est
en fait dans /lib
sous le nom libm.so.6
qui est un
lien symbolique vers libm-2.1.3.so
.
Regardez le dernier param�tre dans le texte affich�. Il y a plus de 10
caract�res affich�s alors que %10s est sp�cifi�.
L'utilisation de fonctions effectuant des op�rations sur des pointeurs sans
v�rifier la limite, comme sprintf
et strcpy
, est
d�pr�ci�e pour pr�venir les exploits de d�passement de tampon, annulant les
effets ci-dessus. Utilisez snprintf
et strncpy
� la
place.