String zerteilen



  • hi,
    so'ne stringkonstante kommt nicht auf den stack. die steckt im 'speicher für konstanten' (wie auch immer das platformspezifisch gelöst ist), und ist die ganze zeit über vorhanden. temporär sind nur diese adressen, mit denen die funktion arbeitet z.b. bei übergabe die anfangsadresse der stringkonstanten, bei der rückgabe eine adresse die mitten rein zeigt...
    :xmas2:



  • Und selbst wenn du dort etwas übergibst, was auf dem Stack liegt, dann gehört es zu dem Stack-Bereich der aufrufenden Funktion. Das heißt, selbst mit dieser Konstruktion

    char* remove_path(char* path){...}
    
    int main()
    {
      char path[MAX_PATH];
      scanf("%s",path);
    
      printf("Dateiname: %s\n",remove_path(path));
    }
    

    gibt es keine Probleme, weil das Array der main()-Funktion gehört und erst an deren Ende wieder zerlegt wird.

    (das Problem mit dem Stack bekommst du nur, wenn du lokal (in der Funktion) ein Array anlegst und dessen Adresse zurückgibst)



  • hi,
    am besten finde ich diese variante:

    char *remove_path (char *path)
    {
        char *p;
        for (p = path; *path; path++)
            if (*path == '\\')
                p = path+1;
        return p;
    }
    

    braucht weder 'strlen' noch sonstwas...
    :xmas2:



  • Ja, super.

    Rüdigers Variante hat den gigantischen Nachteil eine Standardfunktion zu nutzen, ist dafür aber auch kürzer & lesbarer.



  • finix schrieb:

    Ja, super.
    Rüdigers Variante hat den gigantischen Nachteil eine Standardfunktion zu nutzen, ist dafür aber auch kürzer & lesbarer.

    hauptsache, du hast was zu meckern, ne? 🙄



  • ten schrieb:

    finix schrieb:

    Ja, super.
    Rüdigers Variante hat den gigantischen Nachteil eine Standardfunktion zu nutzen, ist dafür aber auch kürzer & lesbarer.

    hauptsache, du hast was zu meckern, ne? 🙄

    Tut mir nicht Leid dass du dich mal wieder unnötigerweise von meiner Meinung angegriffen fühlst. Und deine Vermutung ist komplett haltlos, ansonsten dürfte es dir nämlich nicht schwer fallen aufzuzeigen inwiefern ich an rüdigers Implementation "rumgemeckere".



  • finix schrieb:

    ...dass du dich mal wieder unnötigerweise von meiner Meinung angegriffen fühlst.

    tu' ich das?

    finix schrieb:

    ...ansonsten dürfte es dir nämlich nicht schwer fallen aufzuzeigen inwiefern ich an rüdigers Implementation "rumgemeckere".

    du meckerst nicht über rüdis code, nee, das hab' ich nicht gemeint...
    :xmas2:



  • @ten: Was meinst du, warum irgendjemand sich hingesetzt und die Standardfunktionen zusammengetragen hat? Bestimmt nicht, damit jeder Programmierer sich hinsetzen muß und sie nochmal von Hand nachprogrammieren muß.



  • CStoll schrieb:

    @ten: Was meinst du, warum irgendjemand sich hingesetzt und die Standardfunktionen zusammengetragen hat? Bestimmt nicht, damit jeder Programmierer sich hinsetzen muß und sie nochmal von Hand nachprogrammieren muß.

    na, hast ja recht. die haben schon ihre daseinsberechtigung. ich find's aber trotzdem am schönsten, wenn man ohne auskommt...
    :xmas2:



  • ten schrieb:

    finix schrieb:

    ...dass du dich mal wieder unnötigerweise von meiner Meinung angegriffen fühlst.

    tu' ich das?

    finix schrieb:

    ...ansonsten dürfte es dir nämlich nicht schwer fallen aufzuzeigen inwiefern ich an rüdigers Implementation "rumgemeckere".

    du meckerst nicht über rüdis code, nee, das hab' ich nicht gemeint...
    :xmas2:

    Es hatte durchaus den Anschein dass du dich angegriffen fühlst, ja. Dass ich nicht über rüdis Code gemeckert habe ist mir nicht nur geläufig sondern das ist auch direkt meiner Aussage zu entnehmen. Deine Vermutung hat jedoch nahegelegt dass du der Ansicht bist dass ich an jedem & allem etwas rummeckern muss. Deinem Kommentar nach zu urteilen scheint das eine Fehlinterpretation gewesen zu sein und du hast soeben meinen Feldzug speziell gegen dich aufgedeckt 🙂

    ten schrieb:

    CStoll schrieb:

    @ten: Was meinst du, warum irgendjemand sich hingesetzt und die Standardfunktionen zusammengetragen hat? Bestimmt nicht, damit jeder Programmierer sich hinsetzen muß und sie nochmal von Hand nachprogrammieren muß.

    na, hast ja recht. die haben schon ihre daseinsberechtigung. ich find's aber trotzdem am schönsten, wenn man ohne auskommt...
    :xmas2:

    Wie passt den das zusammen? Standardfunktionen haben ihre Daseinsberechtigung aber man sollte sie tunlichst meiden? Die Begründung würde ich gern mal sehen (und selbige dann nutzen um gegen die Funktion remove_path (& Funktionen neben main überhaupt) zu argumentieren, schließlich wäre es "am schönsten" den Code einfach direkt an die Aufrufstelle zu pasten).



  • Oooops, jetzt habe ich diesen extrem sinnvollen Thread ausversehen geschlossen.


Anmelden zum Antworten