www.mikrocontroller.net

Forum: PC-Programmierung Textdatei programmieren mysteriöser Fehler


Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich prgrammiere mit VC++ .Net und schreibe gerade an einem Programm das 
mir den Inhalt einer Textdatei zeilenweise einliest. So weit bin ich 
schon:
array<String^>^ line;
String^ path;

path = Application::StartupPath + "Pfad2";
System::IO::StreamReader^ line2 = gcnew System::IO::StreamReader( path );

line[0] = line2->ReadLine();
toolStripStatusLabel1->Text = System::Convert::ToString(line[0]);

Wenn ich jetzt kompilieren lasse, dann zeigt er mir keinen Fehler an, 
was auch klar ist, da er nur die Schreibfehler checkt. Aber wenn ich 
jetzt das Programm dann starte, stürzt es gleich wieder ab, und es kommt 
die Fehlermeldung:


Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" 
ist in Programm.exe aufgetreten.

Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine 
Objektinstanz festgelegt.


Diesen Fehler bekomme ich zum ersten mal. Rein theoretisch würde ich 
jetzt mal vermuten dass der Fehler kommt, wenn nichts in der Datei steht 
von wegen:  "System.NullReferenceException" aber in der ersten zeile der 
Datei steht eine Zahl, in der zweiten ein Wort.

Was habe ich denn falsch gemacht? Ich will die erste Zeile in das array 
line an der stelle 0 packen, die zweite zeile an die stelle 1 im array 
machen.

Kann mir jemand helfen?

Saugnapf

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Saugnapf wrote:

Ohne jetzt der grosse managed C++ Profi zu sein:


> Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException"
> ist in Programm.exe aufgetreten.
>
> Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine
> Objektinstanz festgelegt.

Ich denke mal, das kommt daher, weil du nirgends das Array
Objekt anlegst.

array<String^>^ line;

ist ja erst mal nur eine Referenz auf ein mögliches Array Objekt.
Aber wo ist es denn tatsächlich, wo legst du denn das Array
an, wenn du versuchst hier:

   line[0] = line2->ReadLine();

in das Array zu schreiben.

Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich wusste nicht dass man das array noch irgendwo anlegen muss. ich habe 
erst letztens mit arrays angefangen zu arbeiten.

Wie muss man denn das array anlegen? Könntest du mir nochmal einen Tipp 
geben?

Danke,

Sugnapf

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
line ist ein Verweis auf ein Array (von unbestimmter Größe) von (nicht 
angelegten) Strings.
Angelegt wird das Array z.B. so
array<String^>^ line = gcnew array<String^>(20);
Danach hat das Array Platz für zwanzig Strings, wobei die Strings immer 
noch Nullreferenzen sind, was im diesem Fall nichts macht, da ReadLine 
einen neuen String zurückliefert.

p.s. anscheinend ist es z.Z. irgendwie Mode den Managed C+-Quatsch zu 
benutzen. IMO entweder richtiges C++ etc. nehmen oder gleich C# + Net 
Framework.

Autor: Saugnapf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke leute, es geht jetzt.

Saugnapf

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.