Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Elemente eines char-Vektors lassen sich nicht ausgeben!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.03.2014, 20:17 Uhr
Yadgar



Hi(gh)!

Ich will ein Programm schreiben, das aus SVG-Skripten Texturdefinitionen für POV-Ray erzeugt... dazu muss ich natürlich erst einmal das SVG-Skript vom Massenspeicher einlesen. Da die Zeichenanzahl nicht von vornherein bekannt ist, verwendete ich zum Speichern der Zeichen im Arbeitsspeicher ein vector-Objekt vom Typ char:


C++:
#include <iostream>
#include <string.h>
#include <fstream>
#include <vector>
using namespace std;

int main(int paramn, char* params[])
{
  if (paramn < 3)
  {
    cout << "Usage: flagmaker <input_file.svg> <output_file.inc>" << endl;
    return -1;
  }
  if (!(strstr(params[1], ".svg") || strstr(params[1], ".SVG")) || !(strstr(params[2], ".inc") || strstr(params[2], ".INC")))
  {
    cout << "Input file must be an SVG (.svg) file, output file must be a POV-Ray include (.inc) file!" << endl;
    return -1;
  }
  ifstream svgfile;
  vector<char> puffer;
  char c;
  unsigned int i=0;
      
  svgfile.open(params[1]);
  if (!svgfile)
  {
    cerr << params[1] << " cannot be opened!" << endl;
    return -1;
  }
  
  while (c = svgfile.get() != EOF)
    puffer.push_back(c);
  
  cout << puffer.size() << endl;
  for (i < puffer.size(); i++;)
  {  
    cout << puffer[i] << endl;
    i++;
  }

  cout << params[1] << " has been converted to " << params[2] << endl;
  if (paramn > 3)
    cout << "Extra parameters ignored" << endl;
  
  svgfile.close();
  return 0;
}



Aus irgendeinem Grund wird zwar puffer bis auf die erforderliche Größe erweitert, die einzelnen char-Elemente scheinen aber alle den Wert NULL zu haben, jedenfalls gibt cout nichts aus! Warum?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.03.2014, 07:21 Uhr
Tommix




Zitat von Yadgar:

C++:
  for (i < puffer.size(); i++;)
  {  
    cout << puffer[i] << endl;
    i++;
  }




' Morgen,
Die Parameter für for sind nach links verschoben. Es müßte wenn schon dann

C++:
for (;i < puffer.size(); i++)


heißen, obwohl ich ohne zwingenden Grund nicht von der vollständigen Form Initialisierung; Abbruchbedingnung; Inkrement nicht abweichen würde (dann passiert so ein Fehler nicht).

Gruß,
Tommix

Dieser Post wurde am 18.03.2014 um 07:21 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.03.2014, 17:43 Uhr
Yadgar



Hi(gh)!


Zitat von Tommix:

' Morgen,
Die Parameter für for sind nach links verschoben. Es müßte wenn schon dann

C++:
for (;i < puffer.size(); i++)


heißen, obwohl ich ohne zwingenden Grund nicht von der vollständigen Form Initialisierung; Abbruchbedingnung; Inkrement nicht abweichen würde (dann passiert so ein Fehler nicht).



Ich habe es jetzt "klassisch" geschrieben (also mit Initialisierung):


C++:
for (int i = 0; i < puffer.size(); i++)



...prompt taucht das nächste Problem auf: wenn ich char-Werte aus dem Textfile einlese und während des Einlesens auf dem Bildschirm ausgebe:


C++:
  while (c != EOF)
  {
    c = svgfile.get();
    cout << c;
    puffer.push_back(c);
  }



wird der Inhalt der Datei korrekt angezeigt:

[svg]
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="600">
<rect fill="#F2A800" width="1200" height="600"/>
<rect fill="#0033A0" width="1200" height="400"/>
<rect fill="#D90012" width="1200" height="200"/>
</svg>�
[/svg]

Gebe ich anschließend den Inhalt des vector (bzw. string-) Objektes (ich habe zwischenzeitlich das vector- durch ein string-Objekt ersetzt) aus, bekomme ich nur konfusen Datenmüll:

[Müll]
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="600">
<rect fill="#F2A800" width="1200" height="600"/>
<rect fill="#0033A0" width="1200" height="400"/>
<rect fill="#D90012" width="1200" height="200"/>
</svg>�
[/Müll]

Aaaaah, ich verstehe... Es muss etwas mit der Zeichenkodierung zu haben ! Aber seltsamerweise ist sowohl bei meiner Shell (bash) als auch in meinem Editor (KWrite) UTF-8 eingestellt! Was läuft da falsch?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: