Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Frage zu memset

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    Frage zu memset

    Ich habe eine Frage zur Funktion memset, die so aussieht:

    Code:
    void *memset(void *s, int c, size_t n);
    Die Konstante c wird n mal in den Speicher s geschrieben. c ist ein Integer also vermutlich 32 Bit breit. Folgendes Beispielprogramm zeigt jedoch, das memset nur die ersten 8 Byte kopiert. Was macht denn das für einen Sinn, den Parameter dann als int und nicht als char zu machen? Gibt es eine Funktion, die vielleicht die gesammten 32 Bit kopiert?

    Code:
    #include <cstring>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
     unsigned char data [] = {0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88};
     unsigned int pat = 0xFFFFFFFF;
    
     memset(data, pat, 2);
    
     for(int i = 0; i < 8; i++)
       cout << "data[" << i << "] = " << (int)data[i] << endl;
    
     // Eigentlich sollten alle Elemente von data FF sein
    
     return 0;
    }

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486

    Re: Frage zu memset

    Original geschrieben von axeljaeger
    Die Konstante c wird n mal in den Speicher s geschrieben. c ist ein Integer also vermutlich 32 Bit breit. Folgendes Beispielprogramm zeigt jedoch, das memset nur die ersten 8 Byte kopiert.
    Ja memset arbeitet auf bytes,nicht word oder dword.
    Das Argument wird in unsigned char gewandelt.

    Was macht denn das für einen Sinn, den Parameter dann als int und nicht als char zu machen?
    Tja,das ist ebend ein C Relikt.
    Zeichen ('a' - 'z' usw...) sind int nicht char,und die komische Integer Promotion (bei Funktionen mit/ohne Prototypen) spielt da wohl auch noch mit rein.

    Gibt es eine Funktion, die vielleicht die gesammten 32 Bit kopiert?
    Nimm eine Schleife,oder weil du sowieso C++ programmierst,gleich std::copy.Dann haste das beste beider Welten.

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ich hab die Schleife genommen, weil ich in einem char*-Bereich arbeiten muss. Die Lösung mit der Schleife funktioniert auch, aber ich werde eure Hilfe demnächst nochmal brauchen, dann geht es darum, die Nullstellen einer Gleichung 3. Grades zu bestimmen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •