Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speicherzugriffsfehler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
23.11.2003, 18:46 Uhr
Pablo
Supertux
(Operator)


Ich kenne keine andere Lösung als strstr. Oder du könntest deine eigene search Funktion bauen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
23.11.2003, 18:52 Uhr
virtual
Sexiest Bit alive
(Operator)


strncmp:

C++:
if (0==strncmp(url, "http://", 7))
{
   /* http am Anfang */
}else
{
   /* Nicht am Anfang */
}


Natürlich würde auch strstr gehen, ist aber deutlich teuerer:

C++:
if (url==strstr(url, "http://"))
{
   /* http am Anfang */
}else
{
   /* Nicht am Anfang */
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
23.11.2003, 19:29 Uhr
~Alfred
Gast


Hi Virtual,

vielen Dank für deine Lösung mit strncmp. Sie funktioniert wunderbar.

mfg

Alfred
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
23.11.2003, 19:49 Uhr
~Alfred
Gast


Hi,

jetzt habe ich noch eine kurze Frage zur Stringverarbeitung mit C. Ich möchte folgendes Problem lösen.
Nehmen wir einmal an, der Pfad (Variable path) wäre "/home/Alfred/test.txt".
Ich möchte jetzt den Dateinamen ermitteln. Es sollte also "test.txt" herauskommen. Ich habe jetzt überlegt, wie ich das machen kann. Aber strstr() hilft mir hier nicht, da diese das erste Auftreten von "/" berücksichtigt. Gibt es denn vielleicht eine Funktion, mit der ich von hinten suchen kann. Denn das denke ich wäre dann eine recht schnelle Lösung zu diesem Problem.

Vielen Dank im Voraus

Alfred
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
23.11.2003, 20:05 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdio.h>
int last(const char* buffer, char c)
{
  int i;
  if (buffer==NULL) return -1;
  for(i = strlen(buffer)-1; i>=0 && buffer[i] != c ; --i);
  return i;

}

char* cpy(char c, const char* path, char* buffer)
{
    int pos,i,len;
    if (path==NULL) return buffer=NULL;
    pos = last(path, '/')+1;
    len=strlen(path);
    for(i=0; i<len-pos; ++i)
        buffer[i]=path[pos+i];
    buffer[i]=0;

    return buffer;

}

int main()
{
    char* path="/home/rex/readme.txt", filename[255];
    cpy('/',path, filename);
    printf("%s\n",filename);
    return 0;
}




Es gibt bestimmt eine Standard Funktion, die n bytes ab byte x vom pointer irgendetwas kopiert, fällt mir nicht ein, deshalb habe ich meine eigene gemacht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.11.2003 um 20:06 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
23.11.2003, 20:42 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würds so machen:

C++:
char* path = "/usr/local/bin/bla"; /* Letztlich wollen wir "bla" */
char* filename;

filename = strrchr(path, '/');
if (NULL == filename)
{
    /* Kein "/" im Pfad! */
    filename = path;
}else
{
    /* Dateiname ohne "/"! */
    ++filename;
}


Bei Bedarf kannst Du filename mit strcpy auch in einen Seperaten Speicher kopieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
23.11.2003, 20:48 Uhr
~Alfred
Gast


Hi,

@Pablo: vielen Dank für deine Lösung

@Virtual:

Gerade wollte ich schreiben, dass ich selbst auch eine Lösung gefunden habe mit strrchr(). Jetzt war ich wohl etwas zu spät dran. Trotzdem vielen Dank.

Meine Lösung war so:

Code:
sprintf(file,"%s", strrchr(path,'/') + 1);



mfg

Alfred
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
23.11.2003, 20:53 Uhr
Pablo
Supertux
(Operator)


Stimmt, ich habe strrchr vergessen!!!! das ist was ich schon gesagt habe! Das war die einfachste Lösung.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: