007
16.04.2008, 17:17 Uhr
0xdeadbeef
Gott (Operator)
|
Die üblichste Methode in C ist, den Buffer von außen zu übergeben, samt Längenangabe. In diesem Fall zum Beispiel
C++: |
#include <stddef.h> /* size_t */ #include <stdio.h> #include <string.h> /* memset */
int *zero_array(int *p, size_t len) { return memset(p, 0, len * sizeof(int)); }
int main(void) { int buffer[5]; size_t i;
zero_array(buffer, 5);
for(i = 0; i < 5; ++i) { printf("%d\n", buffer[i]); }
return 0; }
|
...wobei sich in diesem speziellen Fall anböte, memset direkt zu verwenden. Wenn's dynamisch sein soll, muss der Speicher nachher von Hand freigegeben werden, das versucht man nach Möglichkeit eigentlich zu vermeiden - gerade Anfänger vergessen das gerne und handeln sich auf die Art Speicherlecks ein, die u.U. recht schwer zu finden sein können - insbesondere, wenn der Speicher an anderer Stelle freigegeben als angefordert wird. Prinzipiell ginge das dann so:
C++: |
#include <stddef.h> #include <stdio.h> #include <stdlib.h>
int main(void) { int *p = calloc(5, sizeof(int)); size_t i; for(i = 0; i < 5; ++i) { printf("%d\n", p[i]); }
free(p); /* Nicht vergessen! */
return 0; }
|
Nachtrag: Oh, und im übrigen, main ist immer int! -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 16.04.2008 um 17:18 Uhr von 0xdeadbeef editiert. |