我有以下一组代码无法找到我获取垃圾值的原因。我的意图是将字节数复制为目标而不管源是否为我的应用程序制作通用副本。但没有得到正确的结果。有没有办法实现这一点。
int main()
{
char x[6];
char *i="pra";
memset(&x,0,6); //Doing memset
memcpy(&x,i,6);
printf("%x %x %x %x %x %x",x[0],x[1],x[2],x[3],x[4],x[5]);
}
o/p:
70 72 61 0 25 78
我们可以看到0之后的输出是垃圾。但是它为什么要进来以及它来自何处。 乳清memset不能正常工作。 Pleae有助于了解这一概念的原因。
答案 0 :(得分:6)
您正在将i
的六个字节复制到x
,但i
中只有四个字节的非垃圾值,所以最后两个是碰巧的在i
之后。
答案 1 :(得分:2)
你正在复制6个字节的i而它的长度是4.这样做可以解决问题:
memcopy(&x, i, strlen(i));
答案 2 :(得分:2)
memset()工作正常。但 memcpy()将垃圾数据复制到缓冲区。
int main()
{
char x[6];
char *i="pra";
memset(&x,0,6); //Doing memset
printf("%x %x %x %x %x %x",x[0],x[1],x[2],x[3],x[4],x[5]); // All will be 0 here
memcpy(&x,i,6); //6 bytes here mentioned is reponsible for that values
printf("%x %x %x %x %x %x",x[0],x[1],x[2],x[3],x[4],x[5]);
}