RealFairPlayer Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 Hi zusammen, So, mein erster Beitrag, dann wollen wir mal. Es ist anzumerken das ich absoluter C Neuling bin und bisher nur PHP programmiert habe. Was mich schon mal total aus der Fassung bringt ist das Variablen im C Code nicht kenntlich markiert werden (unter PHP wird ja jeder Variablen ein $ vorangestellt). Hier nun mein Code: #include <stdio.h> void main ( void ) { FILE *datei; char dateiname[25]; char zeichen; char abbruch = '#'; printf ("\nBitte Dateinamen angeben : "); scanf ("%s",dateiname); char testing [59]= "/home/matze/lala/src/test"; datei = fopen (testing,"w+"); if (datei == NULL ) { printf ("\nDie Datei konnte nicht geöffnet werden!\n"); } else { printf (testing); printf (dateiname); printf ("\nText eingeben, beenden mit # \n\n"); while (( zeichen = getchar()) != abbruch ) putc (zeichen,datei); printf ("\n\nDanke, das sie mich benutzten\n\n"); fclose (datei); } } Führe ich diesen Code aus klappt es auch weil ich ja der var. testing den kompletten Pfad incl. Dateinamen mitgebe. Wie ihr seht frage ich aber eigentlich zu Beginn einen Dateinamen ab (scanf) und dieser sollte dann verwendet werden, doch seit mehreren Stunden funzt das leider nicht, egal wie ich es probier Merci schon mal fürs draufschaun. Matze Zitieren
Klotzkopp Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 Zeig doch mal ein Beispiel, wie du es versucht hast. Mit "funzt leider nicht" kann niemand etwas anfangen. Zitieren
NiKoMo Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 Für scanf muss ein pointer auf die variable übergeben werden : scanf ("%s",&dateiname); ( das & und zeichen nicht vergessen) ein pointer (oder zeiger) beinhaltet eine speicheradresse. scanf schreibt liesst den eingegeben text in den speicher ab dieser adresse. dann sollte es eigentlich gehen Zitieren
NiKoMo Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 fast vergessen: das & zeichen sagt eigentlich nur, dass die adresse der variable genutzt werden soll. die variable ist in dem fall KEIN pointer pointer werden mit einem * stern definiert Zitieren
RealFairPlayer Geschrieben 3. Januar 2007 Autor Geschrieben 3. Januar 2007 Merci für die Tips. Ich schau mir das gleich mal an und berichte dann Zitieren
Mephisto81 Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 hallo, Für scanf muss ein pointer auf die variable übergeben werden : scanf ("%s",&dateiname); ( das & und zeichen nicht vergessen) ein pointer (oder zeiger) beinhaltet eine speicheradresse. scanf schreibt liesst den eingegeben text in den speicher ab dieser adresse. dann sollte es eigentlich gehen Arrays sind in C/C++ automatisch Pointer. Der Zugriff auf einzelne Elemente wird per Offset von dem ersten Element an berechnet. Deswegen funktioniert das scanf in dem Beispiel oben (ergo: scanf("%s", dateiname) ohne "&" ist hier ok). Zu dem Hauptproblem: Ich würde "dateiname" folgendermaßen vordefinieren: char dateiname[25] = {0}; Ansonsten hat dein Code bei mir funktioniert (SuSE Linux 10.1, gcc 4.1.0) und wie Klotzkopp bereits sagte wären weitere Informationen notwendig um Dir zu helfen. (Interessant wären evtl auch Compiler-Version etc). greetz mep Zitieren
nic_power Geschrieben 3. Januar 2007 Geschrieben 3. Januar 2007 Hallo, void main ( void ) main liefert immer ein "int" zurück, daher: int main() char zeichen; char abbruch = '#'; Das von Dir verwendete "getchar()" weiter unten liefert ein int zurück. Von daher solltest Du auch ints deklarieren. scanf ("%s",dateiname); printf (testing); printf (dateiname); Schöner wäre hier jeweils: printf("%s\n", testing) bzw. printf("%s\n", dateiname). Nic Wie lang ist der Dateiname, den Du eingibst? Ist er zu lang, überschreibst Du deinen Eingabepuffer! Zitieren
SiggiAZE Geschrieben 11. Januar 2007 Geschrieben 11. Januar 2007 Hallöchen, ich bin Info Student und habe ein ähnliches Problem... versuchs mal statt mit scanf mit gets() und dann sollte das auch funzen, da scanf die Dateinamen "C:\UV1\UV2\UV3\test.dat" folgendermassen einliesst: = "C: UV1 UV2 UV3 test.dat" und das ist wohl nicht in deinem Sinne!!! grEEtz SiggiAZE Zitieren
TDM Geschrieben 11. Januar 2007 Geschrieben 11. Januar 2007 Hallöchen, ich bin Info Student und habe ein ähnliches Problem... versuchs mal statt mit scanf mit gets() und dann sollte das auch funzen, da scanf die Dateinamen "C:\UV1\UV2\UV3\test.dat" folgendermassen einliesst: = "C: UV1 UV2 UV3 test.dat" und das ist wohl nicht in deinem Sinne!!! grEEtz SiggiAZE Das ist das schöne an Unixpfaden, man verursacht keine ungewollten Escapesequenzen. btw: \t ist Tab und kein Leerzeichen. Zitieren
Tobias2k6 Geschrieben 12. Januar 2007 Geschrieben 12. Januar 2007 bezüglich deines problems die variablen zu erkennen, schau dir einfach mal die ungarische notation an. ist auch keine perfekte lösung, bringt bei einhaltung aber ordnung in den code. bezüglich der main routine: wegen der main routine, die sollte im grundgerüst etwa so ausehen: int main(int arg, char* argv[]) { return 0; } immer min. 2 parameter, der int gibt die anzahl der übergebenen parameter an und der zweite parameter sind die informationen selber. braucht man zum aufruf von der kommandozeile, ist aber generell auch ohne parameter lauffähig. solltest sie aber dennoch angeben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.