C question related to pointers and arrays
Basically in the code below, my final array does not seem to have the contents from function1(). Any ideas on why I can't get this to work ? Thanks.
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
unsigned char *function1()
{
unsigned char array2[] = { 0x4a,0xb2 };
return (array2 );
}
main()
{
unsigned char temp[] = { 0xaa, 0x0b, 0x03,0x04,0x05,0x06,0x07,0x08,0x09 };
unsigned char x[2];
unsigned char *packet;
int pkt_len;
pkt_len = sizeof(temp) + sizeof(x);
packet = (unsigned char*) malloc ( pkt_len +1);
memset( packet, 0x00, pkt_len +1);
unsigned char *pointer1 = malloc ( sizeof(temp) + 1);
memset( pointer1, 0x00, sizeof(temp) +1);
memcpy (pointer1, temp, sizeof(temp) );
memcpy (packet, pointer1, sizeof(temp) );
printf("\nPacket before copy is 0x%x\n", 开发者_如何学编程packet[8]);
unsigned char *array2 = malloc ( sizeof (x) + 1) ;
array2 = (char *)function1();
printf("\nArray2 is 0x%x\n", array2[0]);
memcpy (packet + sizeof(temp), array2, sizeof(x) );
printf("After copy, Packet contents are 0x%x\n", packet[9]);
}
Following are the mistakes that I observed in your code. You wrote
char temp [] = { a,s,d,f,g,h};
char * pointer1, *array1;
pointer1 = &temp;
memcpy (array1, pointer1, sizeof( temp) );
Now there is no need to do this pointer1 = &temp
, name of any array itself is a pointer.
Hence you can simply do
char temp [] = { a,s,d,f,g,h};
char *pointer1;
memcpy (pointer1, temp , sizeof( temp) );
But wait!
Does pointer1 has enough space to store the contents of temp[]? In your code you have not assigned any space to pointer1, which is likely to crash your program.
The correct way to do it is
char temp [] = { 'a','s','d','f','g','h'};
char *pointer1 = malloc( sizeof(char) * (sizeof( temp) + 1) );
memset( pointer1, 0x00, sizeof( temp) + 1 );
memcpy (pointer1, temp , sizeof( temp) );
here before copying any value into pointer1 we made sure that it has got enough space.
No need to cast malloc() retrun value. In sizeof( temp) + 1
1 is added for null character. Then we did memset() which filled the memory pointed to by pointer1 with null. Just good and healthy practice.
Then you
memcpy ( pointer1 + sizeof(temp), pointer3, sizeof ( the temp array)
Again, does pointer1 has enough space for contents of pointer3? Do you own the memory area pointed by pointer1 + sizeof(temp)
? It too will crash your program.
Now you either use realloc()
or assign a bigger space to pointer1 with malloc()
at earlier stage.
Why sizeof ( the temp array)
here? Don't you think it should have the number of bytes in pointer3?
Finally in the definition of function1()
char *pointer2, *array2;
// Now i need to have pointer2 point to contents of array2.
pointer2 = &temp2;
return pointer2
What does array2
do? Nothing! Then it should be removed.
To return just use
return temp2;
which means pointer2
is also useless.
Hope it helps.
It's not really clear precisely what you're trying to do, but I think this is what you're after. I've commented it to show what it's doing.
void function1(char *dest, size_t len);
int main()
{
/* Allocate an array 'temp' */
char temp[] = { 'a', 's', 'd', 'f', 'g', 'h' };
/* Allocate an array 'array1', the same size as 'temp' */
char array1[sizeof temp];
/* Copy the contents of 'temp' into 'array1' */
memcpy(array1, temp, sizeof temp);
/* Call a function to copy new contents into 'array1' */
function1(array1, sizeof array1);
return 0;
}
void function1(char *dest, size_t len)
{
char temp2[] = { 1, 2, 3, 4, 5 };
/* Determine how much to copy - the _minimum_ of 'len' and 'sizeof temp2' */
if (len > sizeof temp2)
{
len = sizeof temp2;
}
/* Copy contents of 'temp2' into 'dest' */
memcpy(dest, temp2, len);
}
I cant seem to understand your code. The problem is simple but the code wont work.
Next is this piece of code
memcpy ( pointer1 + sizeof(temp), pointer3, sizeof ( the temp array)
I guess you want the final array to contain { a,b,c,d,e,1,2,3,4,5}. Well i would advise you to check pointers and arrays from K&R and then attempt this problem again.
精彩评论