C语言中关于指针和数组的问题
基本上在下面的代码中,我的最终数组似乎没有 function1() 中的内容。关于为什么我无法让它工作有什么想法吗?谢谢。
#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]);
}
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]);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
以下是我在您的代码中观察到的错误。
您写道
现在无需执行此操作
pointer1 = &temp
,任何数组的名称本身就是一个指针。因此你可以简单地做
但是等等!
pointer1 有足够的空间来存储 temp[] 的内容吗?在您的代码中,您没有为pointer1分配任何空间,这可能会使您的程序崩溃。
正确的方法是
在将任何值复制到pointer1之前,我们确保它有足够的空间。
无需强制转换 malloc() 返回值。在
sizeof( temp) + 1
中,为空字符添加 1。然后我们执行memset(),将pointer1指向的内存填充为null。只是良好而健康的做法。那么你
再说一遍,pointer1有足够的空间容纳pointer3的内容吗?您是否拥有
pointer1 + sizeof(temp)
指向的内存区域?它也会使你的程序崩溃。现在您可以使用
realloc()
或在早期使用malloc()
为指针1 分配更大的空间。为什么在这里使用
sizeof(临时数组)
?你不认为它应该有pointer3中的字节数吗?最后在
function1()
的定义中array2
做了什么?没有什么!那么应该将其删除。要返回,只需使用
,这意味着指针2也是无用的。
希望有帮助。
Following are the mistakes that I observed in your code.
You wrote
Now there is no need to do this
pointer1 = &temp
, name of any array itself is a pointer.Hence you can simply do
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
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
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 withmalloc()
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()
What does
array2
do? Nothing! Then it should be removed.To return just use
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.
我似乎无法理解你的代码。问题很简单,但是代码无法运行。
接下来是这段代码
memcpy (pointer1 + sizeof(temp),pointer3,sizeof(temp array)
我猜你希望最终的数组包含 { a,b,c,d,e,1,2,3, 4,5}。
好吧,我建议您检查 K&R 中的指针和数组,然后再次尝试此问题。
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.