non-constat initializer?!
-
hallo, folgender code liegt vor!
#include <stdio.h> #define COUNT 2 char *bg[47]; char *test[COUNT] = { "test",bg[17] }; int main() { // hier steht eine funktion die den inhalt von bg ändert! }
das ist mien programmcode...
nun bekommen ich folgenden compilerfehler:
line 8: non-constant initializer: op "NAME"line 8 ist die zeile: "test",bg[17]
zuerst dachte ich das es daran lag das ich vor dem: "char *test[COUNT] = {" noch ein "const " hatte aber nahcdem ich es weggemacht habe kam der fehler imme rnoch, weiß jemand warum??
bitte hilfe!!!!!!!!!!!
danke für alle antworten!
-
Die beiden Arrays bg und test werden bereits angelegt, bevor main() startet, aber bg wird nicht initialisiert. Das bedeutet aber auch, daß zu dem Zeitpunkt, wo du test initialisieren willst, in bg[17] nur Datenmüll liegt - und genau davor will dich dein Compiler warnen.
-
ok danke, so lernt man täglich dazu.
und wie beleg ich schon mal speicherplatz für bg, dass ich bg in test verwenden kann??
-
Speicherplatz für bg wird durch diese Definition schon belegt - nur wird der nicht initialisiert (eigentlich doch, aber komplett mit NULL-Pointern). Du müsstest dort ebenfalls eine Initialisierungsliste dranhängen, um vernünftige Werte einfüllen zu können.
Alternativ verschiebst du die Wertzuweisung von test[1] auf später:
char* bg[47]; char* test[COUNT] = {"test"};//test[1] bleibt offen int main() { //fülle bg[] test[1]=bg[17]; ... }
-
ich hätte noch eine idee!
char *bg[47]; char **bgbg[47]; char *test[COUNT] = { "test",bgbg[17] }; int main() { // hier steht eine funktion die den inhalt von bg ändert! bgbg[17] = bg[17]; }
geht es irgendwie mit pointer auf pointern?
-
Nein, damit geht es nicht wirklich. Erstens hast du die Anzahl der Indirektionsebenen jetzt durcheinandergewürfelt und zweitens hast du damit überhaupt nichts an deinem ursprünglichen Problem geändert - der Wert, den du in test[1] eintragen willst, wird erst nach der Initialisierung von test ermittelt.
-
das heißt es gibt keine möglichkeit es so zu verwirklichen wie es anfangs von mir angedacht war...nagut dann mach ich es anders...aber trotzdem danke für die antworten!! so lernt man was!