char Array in einer Funktion ändern



  • Hallo, ich möchte gern mit einer funktion das char Array in der main mit
    einer anderen Zeichenkette überschreiben. Bisher konnte ich nur das
    erste Zeichen des Arrays ändern. Wie wäre der beste Weg mit pointern?

    #include <stdio.h>
    #include <stdlib.h>
    
    void test(int *ptr);
    
    int main()
    {
        char password[10];
        test(&password);
        puts(password);
    
        return 0;
    }
    
    void test(int *ptr)
    {
        char x[]="OLLAH";
        *ptr=x;
    }
    

    Vielen Dank im Voraus.


  • Mod

    Viele Fehler:

    Zeile 4/16: Warum hat die Funktion einen int* als Parameter, wenn du chars ändern möchtest? Benutz einen Zeiger auf char!

    Zeile 10: Warum übergibst du einen Zeiger auf das Array? Du möchtest doch den Inhalt ändern, nicht das Array selbst (und es ist auch überhaupt nicht möglich, ein Array in irgendeiner Form zu ändern). Lass den Adressoperator einfach weg, das Array wird dann als ein Zeiger auf das erste Element seines Inhalts ausgewertet. Das ist der sogenannte array decay; ein Array wird bis auf wenige Ausnahmen (der Adressoperator ist eine davon, sizeof eine andere) immer als ein Zeiger auf sein erstes Element aufgefasst.

    Zeile 19: Du hast Zeichenketten (oder Arrays im allgemeinen) in C überhaupt nicht verstanden. Lies dir das in einem guten Buch durch, für einen Forenbeitrag ist das Thema zu umfangreich. Wie schon gesagt, kann man ein Array selber überhaupt nicht ändern (ich vermute, das ist die Absicht hinter dieser Zeile). Und den Inhalt eines Arrays ändert man nicht, indem man = auf ein Array anwendet, sondern eben indem man den Inhalt ändert (was dann eventuell dadurch erfolgen kann, dass man = auf den Inhalt anwendet). strcpy aus der Standardbibliothek ist eine vorgefertigte Funktion für diese Aufgabe.

    Allgemeiner Fehler: Es sieht so aus, als hättest du so lange zufällig Sternchen und andere Sonderzeichen in deinem Code verteilt, bis dieser irgendwie compilierte. Aber compilierender Code bedeutet nicht korrekter Code. Code ist keine zufällige Ansammlung von Zeichen, Code ist Logik pur. Du musst von jedem Zeichen in deinem Code genau wissen, wo und warum du es setzt.
    Falls du diese Vermutung falsch ist und du diesen Code einfach aus Unwissen (anstatt durch Ausprobieren) erzeugt hast: Der Compiler ist schlauer als du. Aktiviere Compilerwarnungen. Alle Fehler, die ich genannt habe, hätte auch dein Compiler erkannt. Er gibt dir bloß keine Fehlermeldung aus, weil die Regeln der Sprache C sehr lax sind (so dass Profis, an die sich die Sprache richtet, alle Freiheiten haben). Aber der Compiler kann dich warnen, wenn du ihn darum bittest.



  • SeppJ schrieb:

    ...Es sieht so aus, als hättest du so lange zufällig Sternchen und andere Sonderzeichen in deinem Code verteilt, bis dieser irgendwie compilierte...

    Klasse Analyse.


Log in to reply