Aus Fullname (char) nur Pfadangaben



  • Irgendwie komme ich nicht weiter.

    Ich weiß jetzt wo das letzte '\' im C-String steht. Aber wie ich nun die nachfolgenden Zeichen durch ein * ersetzte keinen Peil.

    const char * pch;
    	pch=strrchr(pszLog,'\\');
    	printf ("Letzte Zeichen '\\' gefunden an %d Stelle \n",pch-pszLog+1);
    


  • Einfach für die ganze restliche Länge in den String schreiben.

    for(i=posBackslash+1;i<strlen(myString);++i) {
      myString[i]='*';
    }
    

    So oder so ähnlich... 😉



  • Meine letzte Post war etwas missverständlich.
    Ich möchte gerne alles was nach dem Letzten \ steht löschen so das nur noch ein * im Pfad steht. Siehe Post 1



  • Dabudai schrieb:

    Meine letzte Post war etwas missverständlich.
    Ich möchte gerne alles was nach dem Letzten \ steht löschen so das nur noch ein * im Pfad steht. Siehe Post 1

    Dann ist es doch noch einfacher. Einfach an Position [BackslashPosition+1] ein '*' und dahinter eine 0 schreiben.



  • Ich hasse CStrings.
    Ich hab es C++Strings genommen. Ist zwar vllt. nicht schön aber ich habe das was ich will.
    Wenn es einer schöner kann, kann er es hier posten.

    const char*	pszLog;
    	pszLog = DEFAULT_LOG_FILE_NAME;
    
    	const char * pch;
    	pch=strrchr(pszLog,'\\');
    	printf ("Last occurence of '\\' found at %d \n",pch-pszLog+1);
    
    	string s1 = pszLog;
    	string s2;
    	s2 = s1.substr(0,pch-pszLog+1)+'*';
    
    	//printf("STringtest =  %s\n",s1.c_str());
    	//printf("STringtest2 =  %s\n",s2.c_str());
    
    	const char *newname = s2.c_str();
    
    	printf("STringtest =  %s\n",newname);
    


  • Hi,

    Dabudai schrieb:

    Wenn es einer schöner kann, kann er es hier posten.

    ich kanns schöner Bruder, guckst du letzten Post von _matze 🙂



  • Dann lass mich bitte nicht summ sterben, und zeig doch bitte eine Beispiel oder die Funktionen welche ich benötige.



  • Wenn du sowieso C++ machst, dann kannst du auch die Funktionen fuer Strings in C++ benutzen. Z.B. rfind. Mittels substr kannst du dann den ganzen vorderen Teil in einen neuen String packen.



  • Dabudai schrieb:

    Dann lass mich bitte nicht summ sterben, und zeig doch bitte eine Beispiel oder die Funktionen welche ich benötige.

    //z.B. so:
    myString[BackslashPos+1]='*';
    myString[BackslashPos+2]=0;
    
    //oder auch so:
    strcpy(&myString[BackslashPos+1],"*");
    


  • Dabudai schrieb:

    Dann lass mich bitte nicht summ sterben, und zeig doch bitte eine Beispiel oder die Funktionen welche ich benötige.

    Ok, Bruder, guckst du:

    const char* fname =  "C:\\log\\xyz.log";
    
    int main()
    {
    	char buf[FILENAME_MAX+1] = {0};
    	char* p;
    	strncpy(buf, fname, FILENAME_MAX );
    	p = strrchr(buf, '\\');
    	if ( *(p+1) == 0 ) return 0; // * passt nicht, fname zu lang.
    	if (p) *(p+1) = '*', *(p+2) = 0;
    	puts(buf);
    	return 0;
     }
    

    Gruß,
    B.B.



  • Verflixt zuviel los hier heute :D, das war noch nix, hier der korrigierte main Teil:

    char buf[FILENAME_MAX+1] = {0};
    	char* p;
    	strncpy(buf, fname, FILENAME_MAX );
    	p = strrchr(buf, '\\');
    	if(!p) return 0; // Keinen Backslash gefunden.
    	if ( *(p+1) == 0 ) return 0; // * passt nicht, fname zu lang.
    	*(p+1) = '*', *(p+2) = 0;
    


  • Da ist immer noch n Bug drin 😃 mal sehn, ob es jemand merkt :xmas2:



  • Big Brother schrieb:

    Da ist immer noch n Bug drin 😃 mal sehn, ob es jemand merkt

    hier, bugfrei und ganz primitiv:

    void get_path (char *in, char *out)
    {
      char *bs;
      for (bs=0; *in; in++)
      {
        *out++ = *in;
        if (*in == '\\')
          bs = out;
      }
      if (bs)
        out = bs;
      *out = 0;
    }
    

    ^^^muss nur noch ein sternchen drangehängt werden.
    🙂


Anmelden zum Antworten