You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

异或操作后指针变量变化疑问及char*异或程序无输出咨询

你的异或指针问题分析与解决

1. 函数调用后b1(即main里的buffer)确实会被修改

你传递给xorBlocks的是buffer的指针,虽然C++里函数参数是值传递,但这个指针指向的是堆上分配的同一块内存空间。所以在xorBlocks里修改b1[i],本质就是直接修改main函数中buffer指向的内存内容——只要指针有效,这种原地修改肯定会生效,这点不用怀疑。

2. std::cout无输出的原因

你用的初始值是"00111",每个字符对应的ASCII码是:

  • '0' = 48(十进制)
  • '1' = 49(十进制)

因为buffer和previousBlock都被memcpy填充了完全相同的5个字节,所以每个位置的异或操作都是相同值异或,结果必然是0(比如48^48=0,49^49=0)。而ASCII码0对应的是空字符'\0',std::cout输出字符串时,遇到第一个'\0'就会停止输出,所以你看不到任何内容。

如果想验证异或后的实际结果,别直接输出字符串,可以逐个字节打印数值:

for (int i = 0; i <5; i++) {
    std::cout << (int)b1[i] << " ";
}
// 会输出:0 0 0 0 0

3. 代码里的其他小问题

  • 内存泄漏:你用malloc分配了两块内存,但没有用free释放。虽然程序退出时系统会回收内存,但养成良好习惯很重要,记得在return 0前加上:
    free(buffer);
    free(previousBlock);
    
  • 字符串终止符问题:"00111"实际是6个字节(5个字符+1个'\0'),但你memcpy只复制了5个字节,所以previousBlock和buffer里的内容没有字符串终止符。如果用printf输出的话,可能会打印出后面的垃圾数据(直到遇到内存中的'\0'),这点要注意。

内容的提问来源于stack exchange,提问作者Alex544

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:13