I am writing the memset function and my code is below, I am having a problem
void* memsetFun(void* pointer, int c, int size) {
if ( pointer != NULL && size > 0 ) {
unsigned char* pChar = pointer;
int i = 0;
for ( i = 0; i < size; ++i) {
unsigned char temp = (unsigned char) c;
*pChar++ = temp; // or pChar[i] = temp (they both don't work)
}
}
return pointer;
}
I also tried pChar[i] = the value we want and still not working. It gives me some trash numbers that do not make any sense.
And I am calling it:
memsetFun(address, num, size);
printf("value at %p is %d\n", address, *((int*) address));
Where I call the address (I just input the address)
For example, if you to print the chars ( c ) it prints like a weird char that looks like ( for the value 4 )
0 0
0 4
Your code looks fine to me and several people here have commented that it works on their system.
So the obvious thing to do is to debug it – that’s a skill that will come in handy quite a bit in future 🙂 You should learn it now.
What does the following code output when you run it?
From the output, it should be clear what paths the code is taking and what your parameters are (which will greatly assist the debugging process).
Update:
If you’re filling your memory block with anything other than zeros and using this:
to print it out, you will get strange results.
You’re basically asking for a number of those bytes to be interpreted as an integer. So, for example, if you filled it with
0x02bytes and you have a 4-byte integer type, you will get the integer0x02020202(33686018), not0x02as you may expect. If you want to see what the first character value is, use:And based on your latest question update:
If that’s a single character and you’re printing it as a character, there’s probably nothing wrong at all. Many output streams will give you that for a control character (CTRL-D in this case, ASCII code 4). If you instead filled it with ASCII code 0x30 (48), you would see the character ‘0’ or ASCII 0x41 (65) would give you ‘A’.