Funktionsaufrufproblem



  • Ich wills programmtechnisch loesen, weil ich lese mit fscanf zeilenweise dateinamen ein und diese will ich dann an die funktion uebergeben

    Den datentyp string gibts nur in c++ nicht in C!



  • strings gibt es auch in c....



  • fricky schrieb:

    _matze schrieb:

    ...und die Methode Replace() benutzen.

    hier ist das c-forum, nicht PHP oder sowas.
    🙂

    Upps, hast ja Recht...



  • Gut, wenns denn kein MFC sein darf, dann vielleicht so was hier:

    //ungetestet, sollte aber passen
    void replace(char *str,int length,char replace,char with) {
      int i;
      for(i=0;i<length;i++) {
        if(str[i]==replace) {
          str[i]=with;
        }
      }
    }
    


  • Moment mal!

    Du liest einen String ein wie z.B. "C:\test\test.tst" und willst diesen an eine Funktion übergeben? Und du denkst, du müsstest C-like aus allen Backslashes doppelte Backslashes machen?

    Nein, nicht nötig. Du verwendest Escapesequenzen wie '\' in Stringliteralen, um ein '\' zu erzeugen. Es steht ja nicht wirklich ein doppelter Backslash im String! Sonst übergibst du am Ende tatsächlich einen String "C:\\test\\test.tst", mit dem keine Funktion etwas anfangen kann.

    Denke mal an andere Escapesequenzen. Mit '\n' fügst du ein LineFeed ein, mit '\r' ein Carriage Return und mit '\' eben ein '\'. Im String steht dann "C:\test\..." und nicht wirklich "C:\\test\...".



  • nein muss ich nicht, das weis ich, also fuer die uebergabe muss ich das nicht aber fuer das fopen dass dann in der funktion drunter ist,...das braucht \\ und das is mein problem



  • grodnedeingloggt schrieb:

    nein muss ich nicht, das weis ich, also fuer die uebergabe muss ich das nicht aber fuer das fopen dass dann in der funktion drunter ist,...das braucht \\ und das is mein problem

    fopen öffnet dir eine Datei, wenn du einen String "C:\test\test.tst" angibst. Garantiert! Damit du aber als Stringliteral überhaupt einen solchen String zustande bekommst, gibt es Escapesequenzen. Der String sieht dann im Quellcode so aus: "C:\\test\\test.tst", fopen bekommt aber "C:\test\test.tst".

    char *s="C:\\test\\test.tst";  //Inhalt: C:\test\test.tst
    
    //wir nehmen an, s2 wurde
    //aus deiner Datei eingelesen
    //s2                 //Inhalt ebenfalls: C:\test\test.tst
    fopen(s);   //Scheißegal,
    fopen(s2);  //beides identisch...
    

    Hast du es denn einfach mal ausprobiert? Wohl nicht...



  • Hab ich schon. Sonst wuerd ich nicht reinschreiben 😉 aber Danke!Ok, dann liegt der Fehler woanders,....
    ich werd mir mal die Ascii werte anschaun,..



  • Ich glaub ja dass er abspeichert
    C:\test.mp3

    und zwar wie folgt
    C
    :
    \t
    e
    s
    t
    .
    m
    p
    3

    lg



  • Vielleicht hast du ja noch das '\n' am Ende des Strings, falls du mit fgets einliest.
    In dem Fall wird die Datei nicht gefunden, das '\n' muss entfernt werden.
    Einfach ne 0 an die Position schreiben.



  • lese mit fscanf("%s",xxx);

    kann mir wer helfen, is vermutlich nur 5 minuten arbeit, ich wuerds per mail schicken,....
    ich find den fehler nicht.

    darf ichs wem mailen,...kann mir wer ne PN schicken, an den eingeloggtnn user von mir,... dann antworte ich mit dem code,...
    ich find ned weiter,...

    bin auch bereit mich dafuer guetlich zu zeigen.

    ich wills e selbsd programmiern, nur den einen fehler find i ned



  • sancheck(uneingeloggt) schrieb:

    lese mit fscanf("%s",xxx);

    das xxx kann ja alles mögliche sein. schreib dir ein minimalbeispiel und wenns immer noch nicht funzt, poste das minimalbeispiel hier.



  • Kann ich dir den Code per mail schicken?
    waer ein wahnsinn,...



  • Sancheck schrieb:

    Kann ich dir den Code per mail schicken?
    waer ein wahnsinn,...

    Nee, ich meinte, das du dir ein Minimalbeispiel programmieren könntest.
    In diesem Beispiel wird deine Textdatei mit den Dateinamen eingelesen und die Dateien werden geöffnet.
    Wenn das funzt, kannst du in deinem Code den Fehler leicht finden.
    Oder benutze einen Debugger.


Anmelden zum Antworten