memset无法正常工作

时间:2014-07-03 05:24:32

标签: c linux memcpy libc

我有以下一组代码无法找到我获取垃圾值的原因。我的意图是将字节数复制为目标而不管源是否为我的应用程序制作通用副本。但没有得到正确的结果。有没有办法实现这一点。

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有助于了解这一概念的原因。

3 个答案:

答案 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]);
}