C中的异或相同数据导致非零值.为什么?

Dat*_*ria 2 c pointers xor

如何x指针指向的两个数据段?

我试过这个,基于stackoverflow上类似的解决方案,但输出不是我的预期.

这是代码:

void printXor(){    
    int j;
    char* c = strdup("hey");
    for(j = 0; j < strlen(c); j++){
        c[j] ^= c[j];
    }

    printf("%d\n", *(int*)(c));
}
Run Code Online (Sandbox Code Playgroud)

但输出是:7955712.输出不应该是0吗?我对"嘿"感到"嘿",它在int中的值是0吗?

Sta*_*irl 9

看看这个循环:

for(j = 0; j < strlen(c); j++) {
    c[j] ^= c[j];
}
Run Code Online (Sandbox Code Playgroud)

您正在使用修改c和计算其长度strlen.在第一个迭代器strlen返回0并且循环停止之后.

如果你翻译7955712成十六进制,那就是0x796500.0x79是代码'y',0x65'e'最低有效字节的代码0x00.因为你在一个小端机器上运行它,你得到一个空字符串.