Archiv verlassen und diese Seite im Standarddesign anzeigen : OutFile wie InFile, jedoch andere Endung
againsttcpa
30-09-2003, 14:42
Vorweg: Ich habe nicht viel Ahnung von C, also bitte nicht gleich erschlagen.
Hier mein Problem
Ich übergebe einen Dateinamen [inputFilename] als Argument an das Programm. Nun möchte ich, daß [outputFilename] genauso lautet, jedoch eine andere Dateiendung hat.
Wie muß ich das in C (++) bewerkstelligen?
Sven
Original geschrieben von againsttcpa
Wie muß ich das in C (++) bewerkstelligen?
In C++ vielleicht so
#include <string>
#include <iostream>
using namespace std;
int main(int args,char *argv[])
{
string str = argv[1];
string::size_type pos;
if((pos = str.find_last_of(".")) != string::npos)
str.replace(pos,str.size() - pos,".txt");
cout << str << endl;
}
int main( int argc, char* argv[])
{
/* dein Code */
return 0;
}
"argc" ist die Anzahl aller Argumente deines Programms.
Das erste Argument ist immer absoluter Pfad und Ausführbare Datei.
Wenn du dein Programm also mit "prog gaga" startest hast du argc==2.
argv ist ein Array von Strings, die die einzelnen Argumente beinhalten.
Im Beispiel ist das Feld also zwei Einträge groß:
argv[0] hat dann also z.B. den Inhalt "/usr/bin/prog"
argv[1] hat den Inhalt "gaga"
So funktioniert das mit Argumenten/Optionen für Programme in C/C++.
Wie du das intern dann verarbeitest liegt an dir.
againsttcpa
01-10-2003, 09:10
Original geschrieben von Boron
...
"argc" ist die Anzahl aller Argumente deines Programms.
Das erste Argument ist immer absoluter Pfad und Ausführbare Datei.
Wenn du dein Programm also mit "prog gaga" startest hast du argc==2.
...
So funktioniert das mit Argumenten/Optionen für Programme in C/C++.
Wie du das intern dann verarbeitest liegt an dir.
Danke das habe ich als Super-Laie auch noch gerade gewußt, aber es war absolut nicht meine Frage.:mad:
Entschuldigung.
Dann habe ich halt deinen ersten Beitrag falsch interpretiert und das Hauptproblem in der Argumentauswertung gesehen :(.
Witzig, ich habe ein ganz ähnliches Problem. Meine Lösung - entstanden durch "kreativen" :D Umgang mit einem Tutorial -- in C (bzw. GTK) sieht bisher so aus:
/* Datei-Extension löschen */
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
int main(void)
{
gchar *loc;
gchar *basic_string;
gchar *old_string = "Eine.weitere.Datei.tex";
gsize n;
/* Suchen und kopieren */
loc = g_strrstr(old_string, ".");
n = (gsize)(loc-old_string);
basic_string = g_strndup(old_string, n);
/* Ergebnisse. */
if ( loc == NULL ) {
printf("Das Zeichen . wurde nicht gefunden.\n");
} else {
printf("Das Zeichen . wurde an der Position %d gefunden.\n", n);
printf("Der alte String lautet: %s\n", old_string);
printf("Der neue String lautet: %s\n", basic_string);
g_free(basic_string);
}
return(0);
}
Meine zentrale Frage ist aber eigentlich: Geht das noch kürzer - sprich: kann man die drei Zuweisungen in der Mitte noch weiter reduzieren? Und vor allem: Woher kommt die Bezeichnung "loc-old_string"?
Original geschrieben von claus_s
Und vor allem: Woher kommt die Bezeichnung "loc-old_string"?
Das ist keine Bezeichnung,denn - ist in Bezeichnern nicht erlaubt.
Es handelt sich hier um eine Zeigersubstraktion von loc und old_string.
loc zeigt auf das letzte Auftreten von . im string old_string,und old_string auf den Anfang des strings old_string.
Durch die Zeigersubtraktion bekommst du die Länge (Anzahl Zeichen),des Strings ohne Extension
Geht das kürzer?
Ja,wenn man den String nicht kopiert,und old_string auf einen Speicherbereich zeigt,der beschreibbar ist.
char str[] = "eine.datei.exe";
char *p;
if(p = strrchr(str,'.'))
*p = '\0';
Btw. wenn dieser QC 1zu1 aus einem Tutorial stammt,würde ich stark darüber nachdenken das Tutorial zu wechseln.
Original geschrieben von wraith
Das ist keine Bezeichnung,denn - ist in Bezeichnern nicht erlaubt.
Es handelt sich hier um eine Zeigersubstraktion von loc und old_string.
Oh, kein Wunder, daß ich mich totgesucht habe! Da saß der Fehler wohl wieder mal vorm Computer.
Btw. wenn dieser QC 1zu1 aus einem Tutorial stammt,würde ich stark darüber nachdenken das Tutorial zu wechseln. [/B]
Nein, wie gesagt, es war mein Umgang damit. Die ursprüngliche Version sollte nur den Einsatz von strchr verdeutlichen und ich habe das nur für meine Zwecke umgewandelt ("Learning by doing" :D ).
Die Möglichkeit, den String zu kopieren (scheint mir sicherer, da ich ihn noch zum Speichern etc. brauche) und dann direkt abzuändern, ist auch sehr hilfreich. Dann könnte ich "exe\0" ja gleich durch beispielsweise "foo\0" überschrieben, oder?
Vielen Dank für Deine Antwort.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.