strlen klappt nicht



  • Wenn ich es jetzt so mache geht es immer noch net:

    char  str[1000] = ""; 
    char file[250] = "C:\\Test.txx"; 
    char  laststr[255] = (""); 
    const int len = strlen(str);        
    char lastChar[4]; 
    strcpy (str,file);                  
    printf ("%s\n",str); 
    strcpy (lastChar, str+len-3);
    


  • wegen des

    char  str[1000] = "";
    

    ist 'len' 0



  • Hä und welchen Wert muss ich jetzt str hinzufügen?



  • du könntest das const wegmachen und erst nach einer zuweisung auf str die länge abfragen
    (immer wieder)

    oder du lässt const musst aber davor str initialieren damit du eine länge hast

    edit:

    sonst bleibt es null, siehe ten



  • Wenn ich es so versuche klappt es leider auch nicht:

    char fil[1000] = "txt";
    char str[1000];
    char  laststr[255] = ("");
    const int len = strlen(str);
    char lastChar[4]; 
    printf ("%s",str);
    strcpy (lastChar, str+len-3);
    printf ("%s",lastChar);
    

    So wird beim ausgeben von lastChar beim ersten mal " " ausgegeben und beim zweiten mal txt und dann mal wieder C:\aaa.txt
    Wieso?



  • Wo kommt das c:\aaa.txt her?

    Bitte ein Beispiel wo alles drin ist was Du mit den Variablen anstellst. In dem Beispiel oben sind nur zwei Ausgaben, keine einzige Eingabe und auch kein "c:\aaa.txt" enthalten. Deckt sich also nicht mit Deiner Schilderung.



  • Dry Gin schrieb:

    Wenn ich es so versuche klappt es leider auch nicht:

    char fil[1000] = "txt";
    char str[1000];
    char  laststr[255] = ("");
    const int len = strlen(str);
    char lastChar[4]; 
    printf ("%s",str);
    strcpy (lastChar, str+len-3);
    printf ("%s",lastChar);
    

    So wird beim ausgeben von lastChar beim ersten mal " " ausgegeben und beim zweiten mal txt und dann mal wieder C:\aaa.txt
    Wieso?

    leider sehe ich nur einmal printf ("%s",lastChar); wo sind die anderen aufrufe ?

    edit:

    da war wohl einer schneller 😃



  • Auf der Seite http://www.c-plusplus.net/forum/viewtopic-var-t-is-172937.html
    Da wird Rekurisv gesucht und ich übergebe dann den Pfad an die Funktion
    naja egal hier mal die ganze funktion:

    void searching(WIN32_FIND_DATA wfd, char path[],char suchen[]) 
    { 
      char file[500]; 
    FILE *fp; 
    char a[230];
    char fil[1000] = "txt";
    char str[1000];
    char  laststr[255] = ("");
    const int len = strlen(str);
    char lastChar[4]; 
    strcpy(file, path); 
    strcat(file, "\\"); 
    strcat(file, wfd.cFileName); 
    strcpy (a,path);
    strcpy (str,wfd.cFileName);
    printf ("%s",str);
    strcpy (lastChar, str+len-3);
      /* Alle gefundenen Dateien überschreiben  */ 
      /* Sehr gefährlich bei                    */ 
      /* dirsearch("c:\\", "*.*", REKURSIV_JA); */ 
      /* Windows muß dann neu installiert werden*/ 
    
    printf ("%s\n",lastChar);
    printf ("%s\n",fil);
    printf ("%s\n",file);
    system ("PAUSE");
    if ((strcmp(lastChar,fil))== 0)
      {
      fp = fopen (file, "wt"); 
      printf ("Es klapp\n");
      if (fp) 
        { 
              fprintf(fp, "Dies ist ein Test"); 
            fclose(fp);   
           } 
    
      /* wichtig: Datei-Stream wieder schließen */ 
    
      /* Statt dessen nur den Dateinamen ausgeben */ 
      printf("%s\n", file); 
    } 
    }
    


  • ich sehe du benutzt windoze 😉
    wenn du den pfad in seine komponenten zerlegen willst: http://msdn2.microsoft.com/en-us/library/e737s6tf(VS.80).aspx



  • Verstehe die Funktion splitpath nicht ganz



  • Dry Gin schrieb:

    Verstehe die Funktion splitpath nicht ganz

    sowas sagt man nicht. versuchs nochmal.



  • wer sich mit seinen problemen mehr beschäftigt versteht es besser



  • Wenn ich es ma so versuche:

    #include <windows.h> 
    #include <conio.h> 
    #include <stdio.h> 
    #include <string.h>
    #include <stdlib.h>
    #include <wchar.h>
    char *fbprint(char *format, ...) 
    { 
      static char buf[1000]; 
    
      vsnprintf(buf, sizeof(buf), format, (char *)((&format)+1)); 
      return (char *)buf; 
    } 
    
    void searching(WIN32_FIND_DATA wfd, char path[],char suchen[]) 
    { 
      char file[500]; 
    FILE *fp; 
    char a[230];
    char fil[1000] = "txt";
    char  laststr[5000];
    char lastChar[1000]; 
    char str[1500];
    const int len = strlen(str);
    strcpy(file, path); 
    strcat(file, "\\"); 
    strcat(file, wfd.cFileName); 
    strcpy (a,path);
    strcpy (str,file);
    strcpy (lastChar, str+len-3);
      /* Alle gefundenen Dateien überschreiben  */ 
      /* Sehr gefährlich bei                    */ 
      /* dirsearch("c:\\", "*.*", REKURSIV_JA); */ 
      /* Windows muß dann neu installiert werden*/ 
    
    printf ("%s\n",lastChar);
    printf ("%s\n",fil);
    printf ("%s\n",file);
    printf ("%s\n",str);
    printf ("%s\n",wfd.cFileName);
    printf ("%s\n",a);
    printf ("%d\n",len);
    printf ("%s\n",laststr);
    system ("PAUSE");
    if ((strcmp(lastChar,fil))== 0)
      {
      fp = fopen (file, "wt"); 
      printf ("Es klapp\n");
      if (fp) 
        { 
            fprintf(fp, "Dies ist ein Test"); 
            fclose(fp);   
           } 
    
      /* wichtig: Datei-Stream wieder schließen */ 
    } 
    }
    
    void dirsearch(char *path, char *filter, int flagrekursiv) 
    { 
      HANDLE hFindFile; 
      WIN32_FIND_DATA wfd; 
    char dirfound[2000]; 
      hFindFile = FindFirstFile(fbprint("%s\\%s", path, filter), &wfd); 
      if (hFindFile != INVALID_HANDLE_VALUE) 
        { do 
            { if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) 
                { /* FILE_ATTRIBUTE_DIRECTORY nicht gesetzt -> kein Ordner */ 
                  searching(wfd, path,filter);   
                } 
                else /* FILE_ATTRIBUTE_DIRECTORY gesetzt -> ist Ordner */ 
                { if (flagrekursiv && 
                      strcmp(wfd.cFileName, "." ) != 0 && /* no current dir */ 
                      strcmp(wfd.cFileName, "..") != 0)   /* no parent dir */ 
                    { 
                      /* ================= */ 
                      /* rekursiver Aufruf */ 
                      /* ================= */ 
    strcpy(dirfound, path); 
    strcat(dirfound, "\\"); 
    strcat(dirfound, wfd.cFileName); 
    dirsearch(dirfound, filter, flagrekursiv);
                      dirsearch(path, filter, flagrekursiv); 
                    } 
                } 
            } 
          while(FindNextFile(hFindFile, &wfd) != 0); 
          FindClose(hFindFile); 
        } 
    } 
    
    #define REKURSIV_NEIN 0 
    #define REKURSIV_JA   1 
    
    int main() 
    { 
      /* Maske "*.*" oder "*" Voraussetzung für rekursives Suchen */ 
      dirsearch("c:\\test", "*.*", REKURSIV_JA); 
      getch(); 
      return 0; 
    }
    

    in meinem Ordner Test sind folgende Dateien C:\Test\juibiugfb.txt
    C:\Test\Hallo.txt
    C:\Test\Test1\Abc.txt

    Jetzt steht aber nur In der Textdatei Abc Was.
    Wie muss ich des abändern?


Anmelden zum Antworten