[gelöst] 2 Fragen von einem Anfaenger
-
Moin,
ich bin grad dabei mich in C ein zu arbeiten und habe nun zwei Fragen, die mir die Buecher nicht so richtig beantworten koennen.
Also,
1. Wann weiss ich welche Bibliothek ich mit verlinken muss?
z.B.
wenn ich <math.h> benutze muss ich die libm.so mit verlinken. (gcc test.c -lm)Das ich das machen muss weiss ich aus einem Buch, aber wie finde ich das selber herraus, dass <foobar.h> die Bibliothek <libbar.so > benoetigt? In dem Header math.h finde ich keinen Hinweis auf libm.so.
2. Ich habe da noch ein kleines Verstaendnissproblem mit Pointern.
wenn ich folgendes deklariere:char *string;
string = "Das ist mein Text, oder was auch immer.";
printf ("%s", string);dann habe ich einen Pointer angelegt, diesen mit vielen Zeichen gefuellt und dann auf der Standarausgabe wieder ausgegeben. Soweit ist alles klar.
Woher weiss printf aber wielang der string ist? Der Pointer zeigt doch nur auf einen bestimmten Bereich des Speichers, von da schreibe ich den Speicher einfach voll. Warum kann ich das machen? Wie gross ist der Speicherplatz den ich vollschreiben kann? Warum muss ich vorher keinen Speicher mit alloc reservieren?Danke soweit,
Gruss Neverrust
-
@1: Sowas muß dir derjenige schon mitteilen, der die Library geschrieben hat - bei der <math.h> sollte es irgendwo in der Compiler-Doku stehen.
@2:
Erstens hast du den String nicht gefüllt, sondern nur auf ein String-Literal gebogen, das irgendwo im Speicher steht.
Und zweitens: Strings in C werden als Null-terminierte char-Arrays verwaltet, d.h. direkt hinter dem letzten Zeichen wird noch ein \0 in den Speicher gepackt, das Funktionen wie printf() auch wiederfinden können. (problematisch wird es nur, wenn du ein char-array von Hand füllst und dieses \0 vergisst - dann würde printf() soweit lesen, bis es zufällig ein NULL-Byte findet, und inzwischen eine Menge Datenmüll ausgeben)
-
@1 was ist da der "normale" Weg raus zu finden was eine Bibliothek kann? Wie stelle ich es also am bessten an, wenn ich eine bestimmte Funktion suche? Alle Dokus zu den lib's lesen?
@2 Danke, das habe ich jetzt verstanden.
Gruss Neverrust
-
neverrust schrieb:
@1 was ist da der "normale" Weg raus zu finden was eine Bibliothek kann? Wie stelle ich es also am bessten an, wenn ich eine bestimmte Funktion suche? Alle Dokus zu den lib's lesen?
Da wird dir wohl nichts anderes übrig bleiben. (alternativ kannst du auch die Funktionsprototypen im Header betrachten - meist geben die Namen schon einen Hinweis darauf, was die Funktion machen soll)
-
O.K. Wir machen das jetzt mal ganz langsam. Damit auch ich das verstehe.
Ich habe die Headerdatei foobar.h da ist ein Funktionsprototyp
int machWas (int bar)
Wenn ich diese Funktion jetzt nutzen moechte binde ich die Headerdatei mit
#include "foobar.h"
ein, mein Compiler meckert. Wie finde ich nun die passende lib?Stelle ich mich hier grad' bloed an?
Gruss Neverrust
-
Normalerweise bekommst du diese Lib von dort, wo du auch die "foobar.h" herbekommen hast. Alternativ kann es auch sein, daß du eine "foobar.c" hast, die du zusammen mit deinem Programm compilieren und linken mußt.
-
Mit anderen Worten, die Praxis loest das Problem von selbst.
Ich habe wieder zu kompliziert gedacht. :p
Danke fuer die schnelle Hilfe.Gruss Rene