Set array-Größe zur Laufzeit
Ich weiß, wie man ein Struktur-array innerhalb einer Funktion:
typedef struct item
{
int test;
};
void func (void)
{
int arraysize = 5;
item ar[arraysize];
}
Aber wie kann ich die gleichen, wenn das array ist Global definiert:
typedef struct item
{
int test;
};
item ar[];
void func (void)
{
int arraysize = 5;
//What to here?
}
Verwenden
Ich wusste von malloc() wird eine Lösung, aber ich hoffte, es war eine sauberere Methode.
Welche Art von "klarer" Lösung?
Wann ist die array-Größe, bekannt geworden?
malloc()
.Ich wusste von malloc() wird eine Lösung, aber ich hoffte, es war eine sauberere Methode.
Welche Art von "klarer" Lösung?
malloc()
ist auch gut so. Dies ist genau der Fall, es wurde erfunden für.Wann ist die array-Größe, bekannt geworden?
InformationsquelleAutor Muis | 2013-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden kann Sie so:
Aber seine dynamische Zuordnung!
Und wenn
arraysize
bekannt, bei der Kompilierung. dann besser ein makro zu erstellen, wie diese:Seite Hinweis: verwenden Sie Großbuchstaben für makro-Konstanten ist eine gute übung
InformationsquelleAutor Grijesh Chauhan
Variable length arrays sind nur zulässig in C arrays mit automatischen Lager-Dauer. Arrays deklariert-Datei Umfang statische Speicher Dauer so nicht array mit variabler Länge.
Können Sie
malloc
dynamisch Speicher für ein array-Objekt, dessen Größe unknow bei der Kompilierung.das hat nichts zu tun mit Rahmen, aber mit Lager-Dauer. Die variable-Länge-array kann gehen out of scope ist ok, aber Sie sollten nicht beenden Sie die Funktion, wo Sie deklariert ist. Wenn Sie die Funktion beenden, wo das array deklariert ist, wird das Objekt verworfen.
InformationsquelleAutor ouah
InformationsquelleAutor David Grayson
int arraysize = 5; bedeutet, dass die Größe zur Kompilierzeit bekannt IST.
Warum der down-vote, ist es die Frage beantwortet, wie Sie gestellt wurde?
Ich kenne den Unterschied. Seinen code hat arraysize = 5. Das IST die Kompilierzeit.
Vielleicht Klarheit über die Frage-Titel
Set array size at runtime
...InformationsquelleAutor Jim Rhodes
Können Sie nicht ändern Sie die Größe eines Arrays zur Laufzeit. Sie können eine dynamische Speicherzuweisung und rufen
realloc()
wenn nötig.EDIT: In Ihrem Fall schlage ich vor,tun somethig so:
Macht keinen Unterschied in C. Siehe mein edit.
malloc()
ist Ihre Lösung.InformationsquelleAutor Jack