Datei Zeichenweise einlesen - Warnung ignorieren, bzw. verhindern?
-
#include <string> #include <iostream> #include <fstream> using namespace std; bool char_valid (int c) { //... return true; } bool read_file ( string& file_content, string filename ) { ifstream infile ( filename.c_str () ); int c = 0; if ( infile == NULL ) { cout << filename << ": " << strerror(errno) << endl; return false; } while ( infile.eof() == false ) { c = infile.get(); if ( char_valid(c) ) file_content.push_back (c); // warning C4244: 'Argument': Konvertierung von 'int' in 'char', möglicher Datenverlust } return true; } int main() { string f("test.txt"); string content; read_file (content, f); return 0; }Hallo, ich bekomme ne Warnung wegen Zeile 25:
warning C4244: 'Argument': Konvertierung von 'int' in 'char', möglicher Datenverlust
Klar, kann ich wegcasten:
file_content.push_back ((char)c);Oder gibts nen push_back für chars?
-
selber casten, das sagt dem compiler, daß es nicht aus versehen ist, sondern pure absicht.
file_content.push_back (char(c));aber wieso ist c überhaupt ein int??
-
volkard schrieb:
aber wieso ist c überhaupt ein int??
So kenne ich das von C her, einlesen in einen int bis EOF. Vermutlich geht das in C++ anders.
-
Brauche ich hier nen int? Ich meine nein! In C war es nötig, um eine Verwechslung EOF mit 0xFF zu Vermeiden, aber hier prüfe ich ja infile.eof() == false, kann also gleich nen char nehmen! 
-
datread0r schrieb:
volkard schrieb:
aber wieso ist c überhaupt ein int??
So kenne ich das von C her, einlesen in einen int bis EOF. Vermutlich geht das in C++ anders.
ja. üblich ist wohl eher
while ( infile.get(ch) ) //identisch mit while(infile.get(ch),infile) { if ( char_valid(c) ) file_content.push_back (c); }vor allem ist es falsch, vor dem get auf eof zu prüfen. eof ist erst dem stream bekannt, nachdem das mist-zeichen gelesen wurde.
-
Nö, doch nicht:
char c = infile.get();warning C4244: '=': Konvertierung von 'int' in 'char', möglicher Datenverlust.
-
@volkard: sorry zu spät gesehen!
Danke, so geht es!