Externe funktion in C

Hallo zusammen,
ich bin beim C-programmieren ein anfänger. Ich habe folgendes Ziel:
Ich will eine Funktion programmieren, die ein Array aus nullen und einser erzeugt.
so ist das Prinzip der Funktion:
name: GenerateBitStream(int *bitfolge, 13)
also die funktionen erzeugt einen Array „Bitfolge“ der länge 13. Inhalt vom Array ist zufällige Folge von Null und eins.
Ich bin folgender Massen gegangen:
1: Ich habe folgende Header Datei geschrieben (BitStream.h):


#ifndef BitStream_h
#define BitStream_h

#include
#include

extern int *GenerateBitStream(int*, int );

#endif

2: dann habe ich die funktion GenerateBitStream.c geschrieben:


#include"BitStream.h"
#include
#include
#include

int *GenerateBitStream(int *bits, int length){

srand48(time(NULL));

for (int i = 0; i
#include"BitStream.h"

int main(){

int *BitSequence;
int i=0;

GenerateBitStream(BitSequence,10);

for (i=0; i

Hallo,

probier mal folgendes:

nimm mal das „int“ in der Datei Bitstream.c raus und setze es davor, also:

#include"BitStream.h"
#include
#include
#include

int \*GenerateBitStream(int \*bits, int length){

srand48(time(NULL));
int i;
for (i = 0; i 

und beim compilieren musst du glaub auch die BitStream.c mitcompilieren, also



    
    gcc -o test test.c BitStream.c




bei mir funktioniert es.

Gruss x303


PS: Beim oberen hat er bei mir gemeckert und gemeint es wäre kein c99 Standard, bzw außerhalb des c99 Modus.

Hallo Dreisson,

Das Programm test.c habe ich so compiliert: „gcc test.c -o
test“ leider kommt folgende Fehlermeldung:

Meine Frage wäre: gibts einen Fehler im Code?

Ja und zwar einen ganz gewaltigen, aber der hat nichts mit der Fehlermeldung zu tun! (s.u.)

ist das zusammen
binden der drei dateien test.c BitStream.h und
GenerateBitStream so wie ich es gemacht habe richtig?

So wie ich das sehe nicht. Allerdings kenne ich jetzt gcc nicht.
Du musst test.c und Bitsequence.c übersetzen und dann dem Linker noch angeben, dass er diese beiden Objektdateien einbinden muss.

1: Ich habe folgende Header Datei geschrieben (BitStream.h):

> zum Testen der Funktion habe ich folgendes Testprogramm  
> (test.c)geschrieben:  
> ----------------------  
>   
> #include  
> #include"BitStream.h"  
>   
> int main(){  
>   
> int \*BitSequence;


Hier reservierst du nur Speicherplatz für einen Zeiger auf ein Array !
Der Zeiger zeigt irgendwo in den Speicherbereich und dort legt dann
GenerateBitStream() die erzeugten Daten ab ........
Das "nette" an diesem Fehler ist, dass zur Laufzeit irgendwo ein
Fehler auftritt, aber meistens nicht an der Stelle wo der eigentliche
Fehler ist. Du kannst ja z.B. dabei den Code einer anderen Function
überschreiben oder irgendwelche Variablen. Oft trifft man den Stack,
was dann zu einem komplett nicht vorhersehbaren Laufzeitverhalten führt. 

 int BitSequence[10];

reserviert Speicherplatz für 10 Integer.




> int i=0;  
>   
> GenerateBitStream(BitSequence,10);  
>   
> for (i=0; i


MfG Peter(TOO)
P.S. das Tag bewirkt Wunder :wink: