13.7.1 Ein einfaches C-Programm (gcc
)
Ein einfaches Beispiel zum Kompilieren von example.c
mit einer
Bibliothek libm
in eine ausf�hrbare Datei namens
Testbeispiel
:
$ 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); /* Puffer�berlauf verhindern */
y[10] = '\0'; /* f�llen, so dass String mit '\0' endet */
printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
return 0;
}
EOF
$ gcc -Wall -g -o Testbeispiel example.c -lm
$ ./Testbeispiel
1, 2.915, ./Testbeis, (null)
$ ./Testbeispiel 1234567890qwertz
2, 3.082, ./Testbeis, 1234567890qwertz
Hier wird -lm ben�tigt, um mit der Bibliothek
libm
f�r sqrt()
zu linken. Die
eigentliche Bibliothek ist in /lib/
mit dem Dateinamen
libm.so.6
, was ein symbolischer Link auf
libm-2.1.3.so
ist.
Schauen Sie auf den letzten Parameter im Ausgabetext. Es gibt mehr als 10
Buchstaben, obwohl %10s spezifiziert ist.
Die Verwendung von Funktionen die Zeiger auf Speicherbereiche ohne
Bereichscheck nutzen, wie sprintf
und strcpy
wird
missbilligt, um das Ausnutzen von Puffer�berl�ufen zu verhindern, die obige
�berlaufeffekte verwenden. Stattdessen sollte man snprintf
und
strncpy
verwenden.