C: Matris, funktion, memset, får inte till det…
Postat: 18 mar 2012, 18:25
Håller ju på att öva upp mina obefintliga kunskaper i C och har nu fastnat på något som jag förmodar är ytterst trivialt.
Följande kod, som inte gör något direkt meningsfullt, fungerar som jag förväntar mig:
Blir precis som jag tänkt mig, men så fick jag för mig att jag, i övningssyfte, skulle göra en förenklad nollställningsfunktion, ibland får man ju bara för sig saker…
Sagt och gjort:
Jaha ja, det ser ju bra ut. Bara ett enda litet problem: Det fungerar inte…
I funktionen Reset verkar problemet ligga i ”sizeof(x)”, för om jag ersätter det med ”100” (fyra bytes per element, 25 element) så fungerar det.
Jag är lite konfunderad och kan inte riktigt förstå detta, så jag är tacksam för om jag kan få en liten förklaring om detta…
Följande kod, som inte gör något direkt meningsfullt, fungerar som jag förväntar mig:
Kod: Markera allt
#include <stdio.h>
#include <string.h>
void Reset(int*);
int main(int argc, char** argv) {
int buffer[25];
int i;
memset(buffer,0,sizeof(buffer)); // Nollställer matrisen.
for (i=0; i<25; i++){
printf("buffer(%d): %d\n",i,buffer[i]);
}
return 0;
}
Sagt och gjort:
Kod: Markera allt
#include <stdio.h>
#include <string.h>
void Reset(int*);
int main(int argc, char** argv) {
int buffer[25];
int i;
Reset(buffer);
for (i=0; i<25; i++){
printf("buffer(%d): %d\n",i,buffer[i]);
}
return 0;
}
void Reset(int x[]){
int i;
memset(x,0,sizeof(x));
for (i=0; i<25; i++){
printf("x(%d): %d\n",i,x[i]);
}
}
I funktionen Reset verkar problemet ligga i ”sizeof(x)”, för om jag ersätter det med ”100” (fyra bytes per element, 25 element) så fungerar det.
Jag är lite konfunderad och kan inte riktigt förstå detta, så jag är tacksam för om jag kan få en liten förklaring om detta…