2016-06-10 10 views
-1

Ich muss eine Funktion erstellen, die eine Zahl akzeptiert, eine Zeichenfolge/Sequenz von Zahlen dynamisch zuweist, sie mit Zufallszahlen initialisiert und zurückgibt. Irgendwelche Hilfe?Dynamisches Zuweisen eines int-Arrays

+1

die '*' s entfernen, bevor 'niz' und legte ein' * '' vor funkcija'. 'niz' ist ein Zeiger auf' int', und '* niz' ist ein' int' und es ist eigentlich dasselbe wie 'niz [0]'. Wenn Sie 'int funkcija (...' schreiben, dann geben Sie ein 'int' zurück, aber Sie wollen einen Zeiger auf' int' zurückgeben.) –

Antwort

1

Es gibt ein paar Probleme mit Ihrem Code, zum Beispiel malloc() einen Zeiger zurückgibt, so dass Sie wollen einen Zeiger auf eine Variable zuzuordnen, die ist ein Zeiger. Mit anderen Worten, Sie sollten den Rückgabewert malloc()niz und nicht *niz zuweisen.

Als nächstes sollte einen Zeiger zurückgeben, wo das Array int s mit den zufälligen Werten residieren. Der Rückgabetyp sollte int * sein.

In Fortsetzung mit der obigen Logik sollte Ihre Funktion den Zeiger niz zurückgeben. Wenn Sie niz (mit *niz) dereferenzieren, geben Sie das erste Element des Arrays zurück (das ist nicht, was Sie brauchen).

-1
void funkcija(int broj) 
{ 

    char *niz; 
    int i; 

    niz = (char*)malloc(broj*sizeof(char)); 
    fillstring(niz, broj); 

    //Use string here 

    free(niz); 
} 

void fillstring(char *buffer, int len) 

{ 
    int i; 
    srand(time(NULL)); 

    for (i = 0; i < len; i++) 
    { 
     buff[i] = '0' + rand() % 10; 
    } 
} 
+0

Wie macht es Sinn, srand innerhalb einer Funktion namens "fullstring" anzurufen? Klingt wie eine Funktion, die Sie vielleicht mehr als einmal aufrufen möchten – Lundin

+0

Es ist besser, Speicher an der gleichen Stelle zu reservieren, wo Sie ihn frei haben werden Ich möchte nicht malloc() aufrufen und den Zeiger auf den zugewiesenen Speicher in der Aufruf Funktion – Beka

+0

Vereinbar damit (obwohl in diesem Fall die Funktion nur Speicher leckt), aber der Aufruf srand muss in irgendeiner Art von Init-Funktion sein, da es nur einmal aufgerufen werden sollte – Lundin

0

Sie wollen dies:

int funkcija(int broj)  
{  
    int *niz; 
    int i; 

    niz = (int*)malloc(broj*sizeof(int)); 

    srand(time(NULL)); 

    for (i = 0; i < broj; i++) 
    { 
     niz[i] = rand() % 50; 
     printf("%d\n", niz[i]); 
    } 

    return niz;  
} 
Verwandte Themen