string array in fopen("%s");
-
Hallo zusammen,
vor ein paar Tagen hab ich mich wieder etwas mit C befasst, und wollte mir ein Programm schreiben das zuersteinmal eine .txt Datei öffnet deren Pfad der Benutzer vorher über die Tastatur eingegeben hat ( konsolen anwendung )
und ein simples "Hallo" hinterlässtjetzt steh ich vor folgendem Problem das ich fopen zwar mit %s einen char wert übergebe aber allerdings in der sleben Programmzeile keine möglichkeit finde meine variable &pfad unterzubringen.
in google hab ich nichts brauchbares bzw. funktionierendes gefundenwäre nett wenn mir jemand helfen könnte
mfg
jogi
#include <cstdlib> #include <iostream> #include <stdio.h> using namespace std; int main(void) { char pfad[]; ... scanf("%s",&pfad); printf("Pfad: %s \n",&pfad); //Pfad kontrolle FILE * csvdat = fopen("%s","a"); fprintf (csvdat,"Hsllo"); fclose (csvdat); system("PAUSE"); return 0; }
-
ach komm, wie suchst du denn?
im www gibts sowas von viele funktionierende beispiele.
-
im www habe ich aber nichts gefunden das bei mir funktioniert, sonst würde ich hier wohl kaum schreiben, und wäre es für dich nicht einfacher die stelle im code zu nennen anstelle von deiner predigt ?
-
fopen() kennt keine Formatspecifier.
Eine Datei mit dem Namen "%s" wirst du auch nicht haben.
Der Dateiname ist in pfad gespeichert (so heißt dein Variable).
Und pfad[] braucht auch Platz für den Namen.
-
jogi3k schrieb:
im www habe ich aber nichts gefunden das bei mir funktioniert, sonst würde ich hier wohl kaum schreiben, und wäre es für dich nicht einfacher die stelle im code zu nennen anstelle von deiner predigt ?
nein das wäre nicht einfacher, weil fast jede zeile von dir nen fetten bug hat.
wenn du auf anhieb nichts komplettes im netz findest, dann zerlege dein vorhaben in mehrere teile, z.b.1 string einlesen
2 datei zum schreiben öffnen
3 string in datei schreiben
4 string in der konsole ausgeben
5 datei schließenzu den einzelnen punkten findest du ganz sicher etwas und dann fügst du das ganze zu einem programm zusammen.
davon mal abgesehen hilft dir normalerweise dein compiler grobe fehler zu finden. lies dir mal die fehlermeldungen durch und versuche sie zu verstehen
das hilft of weiter.
-
auf anhieb was komplettes im netz ? wo wäre da der spaß ? und ich hab auch nicht auf anhieb genau das programmiert sondern immer stükchenweiße probiert ob es funktioniert, ich hab auch neben mir nen dicken C-Ordner von meiner Ausbildung liegen aber egal..das programm lässt sich auch ausführen ..
von so einem wie dir will ich mir auch nicht helfen bzw. ans bein bissen lassen
-
sry für den doppel post aber ^^
1 string einlesen klappt denn ich kann in ausgeben ..
2 datei zum schreiben öffnen klappt auch, nur nicht mit pfad als var
3 string in datei schreiben klappt auch
4 string in der konsole ausgeben womit wir bei pkt. 1 wären
5 datei schließen aha ....
-
Punkt 1 und 2 sind trotzdem falsch. Auch wenn es bei dir scheinbar funktioniert.
#include <stdio.h> int main(void) { char pfad[1000]; // Das Array braucht eine Länge ... scanf("%s",pfad); // Da das ein Array ist, braucht es keinen Adressoperator printf("Pfad: %s \n", pfad); // dto. FILE * csvdat = fopen(pfad, "a"); // in pfad steht der Dateiname ... }
-
DirkB schrieb:
Punkt 1 und 2 sind trotzdem falsch. Auch wenn es bei dir scheinbar funktioniert.
#include <stdio.h> int main(void) { char pfad[1000]; // Das Array braucht eine Länge ... scanf("%s",pfad); // Da das ein Array ist, braucht es keinen Adressoperator printf("Pfad: %s \n", pfad); // dto. FILE * csvdat = fopen(pfad, "a"); // in pfad steht der Dateiname ... }
vielen dank
das man den operator weglassen konnte wusste ich nicht, hab es auch bei fopen mit " & " probiert, vielleicht lag auch da das problem, und das mit derm array, ich dachte wenn ich keine länge definiere wird einfach die entsprechende Zeichenlänge verwendet.
danke !
-
Den kannst du nicht weglassen, den musst du weglassen.
Vereinfacht gesagt:
Den Adressoperator nimmst du, wenn du die Werte der Variablen verändern willst, z.B: bei der Eingabe mit scanf. Bei printf willst du nur ausgeben, da brauchst du ihn sowieso nicht.Ob da ein Adressoperator hinkommt, wird bei der Funktionsdeklaration bestimmt.
Das bei scanf und Array kein Adressoperator hinkommt hat auch seine Gründe.
Fang nochmal bei Array/Feldern an zu lesen.