FILE *Stream in einen Array einlesen
-
@Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...
-
if( argc != 3 ) {
puts( "usage: fooapp [input file] [output file]\n" );
return EXIT_FAILURE;
}wenn du eh nicht ueber kommandozeile bedienst, warum nimmst du den ganen kram denn nicht raus?? dann muss man argc auch nicht auf 3 setzen. und du hast ja schon gelernt, dass argc die anzahl der argumente an das programm zaehlt! ... usw.
-
@Swordfish, mit welcher Funktion kann ich denn die Ausgabe Zeilenweise wiedergeben, d.h. nicht in Form einer Code-Struktur, sondern in Form eines Textes, das z.b. nur 3-4 oder auch mehr Zeilen hat.
nicht: sondern:
class Egal class Egal{int b; bla bla}
{
int b;
bla
bla
bla
[/code]}Hast Du ne Idee...
-
ich hab das schon rausgenommen Moh :), das ist mir schon bekannt, aber danke Dir..
-
das war kein hinweis oder tipp
fuehl dich mal ein wenig angegriffen
-
elturco schrieb:
@Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...
Es werden zwar drei Parameter übergeben, aber nicht Input und Output.
Das kommt doch nur in Pascal vor
program pascali(Input, Output)...
In C sind es immer noch
- argc : Anzahl der Kommandozeilenparameter
- argv : Array der Kommandozeilenparameter
- envp : Array der UmgebungsvariablenOder hab' ich dich jetzt mißverstanden?
-
elturco schrieb:
@Moh ich habe es so ungefaehr verstanden, es werden 3 Parameter ubergeben, Input, Output und die dritte ist, bin mir nicht so ganz sicher...
argv[ 0 ] enthält den Namen des Programms selbst
argv[ 1 ] enthält den Namen der Eingabedatei
argv[ 2 ] enthält den Namen der Ausgabedateidas sind - Moment bitte, muss mal zählen... - ähm ja, genau 3 (argc).
elturco schrieb:
@Swordfish, mit welcher Funktion kann ich denn die Ausgabe Zeilenweise wiedergeben, d.h. nicht in Form einer Code-Struktur, sondern in Form eines Textes, das z.b. nur 3-4 oder auch mehr Zeilen hat.
nicht: sondern:
class Egal class Egal{int b; bla bla}
{
int b;
bla
bla
bla
[/code]}Hast Du ne Idee...
Greetz, Swordfish
-
Ja die Frage nochmal hier...
Ich moechte als Output das ProgrammCode als Text ausgegeben haben und nicht in Form einer Programmstruktur, d.h. hier ein Beispiel um das genauer zu erlaeutern:
Nicht so
void main() { int y; int f; getchat(){} usw. }
sondern so
class egal{int a;int b;getchar(){}} usw.
Hast Du dafur eine Idee, sicherlich muss man eine Kleinigkeit aendern oder einfuegen, aber ich komm einfach nicht drauf.
Gruesse
-
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> int main( int argc, char *argv[ ] ) { if( argc != 3 ) { puts( "usage: fooapp [input file] [output file]\n" ); return EXIT_FAILURE; } FILE *input = fopen( argv[ 1 ], "rt" ); if( !input ) { printf( "The input file \"%s\" does not exist!\n", argv[ 1 ] ); return EXIT_FAILURE; } FILE *output = fopen( argv[ 2 ], "rt" ); if( output ) { printf( "The output file \"%s\" does already exist!\n", argv[ 2 ] ); printf( "Should it be overwritten? ( y/n )\n" ); fclose( output ); if( toupper( getchar( ) ) == 'N' ) { puts( "aborting..." ); fclose( input ); return EXIT_FAILURE; } } output = fopen( argv[ 2 ], "w+t" ); if( !output ) { printf( "The output file \"%s\" could not be created!", argv[ 2 ] ); fclose( input ); return EXIT_FAILURE; } char *text; fseek( input, 0, SEEK_END ); long input_length = ftell( input ); fseek( input, 0, SEEK_SET ); text = (char*) malloc( input_length + 1 ); if( !text ) { puts( "Not enough memory! "); fclose( input ); fclose( output ); return EXIT_FAILURE; } char *in = text; while( !feof( input ) ) { *in++ = fgetc( input ); } *( in - 1 ) = '\0'; fclose( input ); printf( "\n\"%s\":\n\n%s\n\n", argv[ 1 ], text ); char *first = text; while( ( first = strstr( first, "//" ) ) ) { char *remove = first; if( first != text ) { if( *( first - 1 ) == '\n' ) { --first; } } while( ( *remove != '\n' ) && ( *remove != '\0' ) ) { ++remove; } strcpy( first, remove ); } first = text; while( ( first = strstr( first, "/*" ) ) ) { char *remove = strstr( first, "*/" ); if( !remove ) { printf( "Compouned statement \"*/\" missing!" ); break; } strcpy( first, remove + 2 ); } first = text; while( *first ) { if( *first == '\n' ) { *first = ' '; } ++first; } first = text; while( *first ) { for( char *i = first; isspace( *i ); ++i ) ; if( ( i - first ) > 1 ) { strcpy( first, i ); first = i; } else { first++; } } printf( "\"%s\":\n\n%s\n\n", argv[ 2 ], text ); fwrite( text, strlen( text ), 1, output ); free( text ); fclose( output ); puts( "done\n" ); }
input:
class egal { int a; int b; } int main( ) { getchar(); }
output:
class egal {int a;int b; }int main( ) {getchar(); }
So, jetzt aber ein bisschen eigeninitiative...
Greetz, Swordfish
-