Pointer (Inhalt) in Variable speichern



  • Moin!

    Wie könnte ich einen Pointer wie diesen

    char *pointer;
    

    in eine Variable kopieren (Inhalt)

    char variable;
    

    ?

    ([Warning] assignment makes integer from pointer without a cast [enabled by default]

    (Es werden verschiedene buchstaben in *pointer geschrieben und wieder freigegeben. Diese möchte ich in der Variable speichern)

    Danke


  • Mod

    Mit * kannst an den Inhalt hinter einen Pointer gelangen. Das sollte eigentlich so ziemlich das allererste sein, was man über Pointer lernt, denn ohne dieses Wissen sind Pointer ziemlich sinnlos. Da du das Wort "Pointer" kennst, nehme ich auch mal an, dass du das so ziemlich als allererstes gelernt hast, bloß es wieder vergessen hast.

    variable = *pointer;
    


  • Ein Codeausschnitt eines Programms

    char *string2:
    
    char *Funktion() {
       char *s=0;
       return s;
    }
    
    string2 = FuncInputFileName2input();
    		printf("Ihre Eingabe lautet: %s.\n\n", string2);
    		len = strlen(string2);
    		free(string2);  // WICHTIG: Speicher freigeben!
    

    Und string2 möchte ich gerne in einer Variable speichern.


  • Mod

    Welchen Datentyp sollte denn deiner Meinung nach die Variable haben, die eine ganze Zeichenkette speichert? char = Buchstabe!



  • SeppJ schrieb:

    Welchen Datentyp sollte denn deiner Meinung nach die Variable haben, die eine ganze Zeichenkette speichert? char = Buchstabe!

    Als Idee wollte ich ein char array verwenden.



  • Ein char Array hat aber den Typ char[], und bei deinem Versuch

    char variable;
    

    hast du nur den Typ char.
    char und char[] sind unterschiedliche Typen, die kannst du nicht direkt zuweisen und musst sie prinzipiell anders verarbeiten.



  • Wenn ich den "Versuch" unternehme eine char variable (ein einzelnes Zeichen)(char *Variable) in einem char Array (z.B char Array[0]) speichern möchte, ist es (natürlich) nicht möglich. Hat jemand eine "passende" Lösung bzw eine Idee um es hinzubiegen?



  • LOL



  • Was möchtest du machen, das nicht in deinem C-Buch erklärt wird?

    char zeichen; // Eine Variable vom Typ char
    // ist etwas anderes als
    char *Zeiger_auf_char; // Eine Variable vom Typ char*
    
    char Array[10]; // bietet Platz für 9 Zeichen plus '\0'
    
    zeichen = 'A';
    Zeiger_auf_char = &zeichen;
    printf("zeichen: <%c> Zeiger_auf_char: <%c>\n", zeichen, *Zeiger_auf_char);
    zeichen = 66;
    printf("zeichen: <%c> Zeiger_auf_char: <%c>\n", zeichen, *Zeiger_auf_char);
    
    strcpy(Array, "Hallo");
    Zeiger_auf_char = Array;
    printf("Array[0]: <%c> Zeiger_auf_char: <%c>\n", *Array, *Zeiger_auf_char);
    printf("Array   : <%s> Zeiger_auf_char: <%s>\n",  Array,  Zeiger_auf_char);
    

    Die & und * und auch die Formatspecifier bei printf sind nicht willkürlich gewählt.



  • DirkB schrieb:

    char Array[10]; // bietet Platz für 9 Zeichen plus '\0'

    //sind es nicht 10? [0][1][2][3][4][5][6][7][8][9][10]



  • 9 + 1 Zeichen sind 10.

    C-Fritze schrieb:

    //sind es nicht 10? [0][1][2][3][4][5][6][7][8][9][10]

    Aber du hast 11 Elemente eingezeichnet.

    Bei der Definition wird die Anzahl der Elemente im Array angegeben und nicht der höchste Index.
    Der Index beginnt immer bei 0.
    Somit ist der höchste Index 1 weniger, als der Wert, der bei der Definiton angegeben wurde.



  • DirkB schrieb:

    9 + 1 Zeichen sind 10.

    C-Fritze schrieb:

    //sind es nicht 10? [0][1][2][3][4][5][6][7][8][9][10]

    Aber du hast 11 Elemente eingezeichnet.

    Ich meine 10 + '\0'

    DirkB schrieb:

    Bei der Definition wird die Anzahl der Elemente im Array angegeben und nicht der höchste Index.
    Der Index beginnt immer bei 0.
    Somit ist der höchste Index 1 weniger, als der Wert, der bei der Definiton angegeben wurde.

    Ups, dann hab ich das bis jetzt immer falsch gemacht 😃



  • C-Fritze schrieb:

    Ups, dann hab ich das bis jetzt immer falsch gemacht 😃

    Gut, dass wir darüber gesprochen haben. 😉
    ^Ich hoffe, das sind nur wenige Wochen gewesen.^

    char -Arrays* verhalten sich nicht anders als andere Arrays.
    Das mit der '\0' ist nur eine Vereinbarung für die C-Strings.

    Du kannst in dem (obigen) Array auch zehn Zeichen (ohne die '\0') rein packen, nur dann kannst du die nicht mehr mit den Stringfunktionen und einigen IO-Funktionen verarbeiten.

    * char -Arrays werden für die Zeichenverarbeitung benutzt.
    Willst du Arrays für Ganzzahlen mit kleinem Wertebereich haben, dann nimmt signed char oder unsigned char .
    Besser noch, du nimmst gleich die passenden Typen aus stdint.h


Log in to reply