Ich bin kein Experte in diesem C-Feature, aber mein gesunder Menschenverstand sagt mir, dass Sie keine Objekte vom Typ struct enginestruct
, nur Pointer, definieren können. Dies betrifft die Variable engine
in der folgenden Zeile:
Ich fange an, über die Verwendung von Strukturen in C zu lernen. Es ist herausfordernd und unterhaltsam. Unnötig zu sagen, dass ich auf ein Problem gestoßen bin, das ich nicht herausfinden kann. Ich versuche, ein flexibles Struct-Array als Mitglied einer anderen Struktur zu machen, aber ich bekomme einen Fehler:
ungültige Verwendung von flexiblem Array
Was mache ich falsch?
%Vor%BEARBEITEN 1
So etwas versuche ich zu erreichen
flexible Länge struct Array innerhalb einer anderen Struktur mit C
EDIT 2 *
O.K, so scheint es, als würde ich mich der Erstellung eines Arrays variabler Größe von struct auf die falsche Art nähern. Ich habe 2 Dinge, die ich versuche. Die erste, die ich kenne, funktioniert sicher. Die zweite würde ich nur gerne, wenn jemand vernünftig es für mich überprüfen könnte. Ich lerne immer noch über Zeiger und möchte wissen, ob A das gleiche wie B. B wäre meine bevorzugte Methode, aber ich weiß nicht, ob es korrekt ist. Ich bin zuversichtlich über eine, weil, wenn ich Kanäle debuggen sehe ich Kanal [0], Kanal [1] channel [2] usw. Aber ich bin nicht so zuversichtlich über B, denn wenn ich es debuggen sehe ich nur eine Adresse zu Speicher und Die Variablen der Channel-Struktur aufgelistet.
A
%Vor%B
%Vor%** EDIT 3 ****
Ja, sie sind gleich. Nicht sicher, wann du einen über den anderen benutzen würdest
%Vor%Ist gleich:)
%Vor%Bearbeiten
Ich denke, ich erinnere mich jetzt, was das Problem ist. Wenn Sie eine Struktur mit einem flexiblen Array als letztes Mitglied deklarieren, macht es etwas völlig anderes als Sie denken.
%Vor%ist NICHT ein Zeiger, es ist ein In-Place-Array, das an die Struktur angrenzt.
Die Art und Weise, wie dies verwendet werden soll, besteht darin, die Struktur über einen vorhandenen Blockspeicher zu legen. Dies ist zum Beispiel beim Netzwerken hilfreich, wenn Sie ein Paket mit Daten variabler Länge haben. Sie könnten also etwas tun wie:
%Vor% Wenn Sie ein Paket erhalten, werfen Sie einen Zeiger auf die Daten in einen mydata
-Zeiger und dann sagt Ihnen das varDataSize
-Feld, wie viel Sie haben. Wie ich schon sagte, die Sache, an die man sich erinnert, ist, dass es sich um einen zusammenhängenden Speicherblock handelt und data
NICHT ein Zeiger ist.
Alte Antwort:
Ich denke, das ist nur im C99-Standard erlaubt. Versuchen Sie, mit dem -std=c99
-Flag zu kompilieren.
Siehe auch diesen Thread, Variablenarray in Struktur
Siehe auch diesen SO-Post: Flexible Array-Mitglieder in C - schlecht?
Ich bin kein Experte in diesem C-Feature, aber mein gesunder Menschenverstand sagt mir, dass Sie keine Objekte vom Typ struct enginestruct
, nur Pointer, definieren können. Dies betrifft die Variable engine
in der folgenden Zeile:
Ich fange an, über die Verwendung von Strukturen in C zu lernen. Es ist herausfordernd und unterhaltsam. Unnötig zu sagen, dass ich auf ein Problem gestoßen bin, das ich nicht herausfinden kann. Ich versuche, ein flexibles Struct-Array als Mitglied einer anderen Struktur zu machen, aber ich bekomme einen Fehler:
ungültige Verwendung von flexiblem Array
Was mache ich falsch?
%Vor%BEARBEITEN 1
So etwas versuche ich zu erreichen
flexible Länge struct Array innerhalb einer anderen Struktur mit C
EDIT 2 *
O.K, so scheint es, als würde ich mich der Erstellung eines Arrays variabler Größe von struct auf die falsche Art nähern. Ich habe 2 Dinge, die ich versuche. Die erste, die ich kenne, funktioniert sicher. Die zweite würde ich nur gerne, wenn jemand vernünftig es für mich überprüfen könnte. Ich lerne immer noch über Zeiger und möchte wissen, ob A das gleiche wie B. B wäre meine bevorzugte Methode, aber ich weiß nicht, ob es korrekt ist. Ich bin zuversichtlich über eine, weil, wenn ich Kanäle debuggen sehe ich Kanal [0], Kanal [1] channel [2] usw. Aber ich bin nicht so zuversichtlich über B, denn wenn ich es debuggen sehe ich nur eine Adresse zu Speicher und Die Variablen der Channel-Struktur aufgelistet.
A
%Vor%B
%Vor%** EDIT 3 ****
Ja, sie sind gleich. Nicht sicher, wann du einen über den anderen benutzen würdest
%Vor%Ist gleich:)
%Vor%Bearbeiten
Ich denke, ich erinnere mich jetzt, was das Problem ist. Wenn Sie eine Struktur mit einem flexiblen Array als letztes Mitglied deklarieren, macht es etwas völlig anderes als Sie denken.
%Vor%ist NICHT ein Zeiger, es ist ein In-Place-Array, das an die Struktur angrenzt.
Die Art und Weise, wie dies verwendet werden soll, besteht darin, die Struktur über einen vorhandenen Blockspeicher zu legen. Dies ist zum Beispiel beim Netzwerken hilfreich, wenn Sie ein Paket mit Daten variabler Länge haben. Sie könnten also etwas tun wie:
%Vor%Wenn Sie ein Paket erhalten, werfen Sie einen Zeiger auf die Daten in einen %code% -Zeiger und dann sagt Ihnen das %code% -Feld, wie viel Sie haben. Wie ich schon sagte, die Sache, an die man sich erinnert, ist, dass es sich um einen zusammenhängenden Speicherblock handelt und %code% NICHT ein Zeiger ist.
Alte Antwort:
Ich denke, das ist nur im C99-Standard erlaubt. Versuchen Sie, mit dem %code% -Flag zu kompilieren.
Siehe auch diesen Thread, Variablenarray in Struktur
Siehe auch diesen SO-Post: Flexible Array-Mitglieder in C - schlecht?