Array zurücksetzen?



  • Hallo

    Gibt es irgend ein Befehl mit dem man ein ganzes Array auf einen Wert setzen kann?

    Danke!





  • Hmm, aber ich bräuchte dies für ein Array aus Integers.

    Gibts dafür was?

    Danke!



  • das funktioniert auch damit. Diese man pages scheinen ein bisschen veraltet zu sein. Denn in meinen steht es:

    NAME
           memset - fill memory with a constant byte
    
    SYNOPSIS
           #include <string.h>
    
           void *memset(void *s, int c, size_t n);
    
    DESCRIPTION
           The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
    
    RETURN VALUE
           The memset() function returns a pointer to the memory area s.
    
    CONFORMING TO
           SVID 3, BSD 4.3, ISO 9899
    

    und wie du es selber lesen kannst, steht niergend, dass c in unsigned char umgewandelt wird. Versuche mal damit. Ansonten kenne ich keine andere Funkion, die das tut.



  • supertux schrieb:

    und wie du es selber lesen kannst, steht niergend, dass c in unsigned char umgewandelt wird.

    Doch hier:
    The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.



  • Muss ich jetzt tatsächlich immer ne Schleife schreiben wenn ich ein Array auf einen Wert gesetzt bekommen möchte, oder gibts da eine Funktion die dies auch für Integer und Double Werte macht?

    Vielen Dank



  • Bashar schrieb:

    supertux schrieb:

    und wie du es selber lesen kannst, steht niergend, dass c in unsigned char umgewandelt wird.

    Doch hier:
    The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.

    stimmt, hab das überlesen.



  • #include <string.h>
    int array[1000];
    memset( array, '\0', sizeof(int) * 1000U );
    /* bzw. */
    memset( array, '\0', sizeof(array) );
    


  • Wenn Du ein Array schnell auf einen bestimmten Wert setzen willst, nimm entweder die direkte Schleife,

    int array[1000];
    int v = 53480;
    int i;
    for ( i=0; i < 1000; ++i ) array[i] = v;
    

    was der Compiler einigermassen brauchbar uebersetzen duerfte, oder wenn das zu lahm ist, den Optimizer (falls vorh.) einschalten, und wenn's immer noch zu lahm ist, nimm in-line Assembler:

    /* fuer IA-32 Prozessoren */
    void setintarray( int* startaddr, int value, size_t count ) {
       _asm {
          push edi
          push ecx
          push eax
          pushfd
          mov edi,startaddr
          mov eax,value
          mov ecx,count
          cld
          rep stosd      
          popfd
          pop eax
          pop ecx
          pop edi      
       }
    }
    /* ... */
    void func( void ) {
       int array[ 1000 ];
       setintarray( array, 545808, 1000U );
    }
    

Anmelden zum Antworten