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 ); }