【发布时间】:2020-04-19 06:57:44
【问题描述】:
我有一个对两个 char* 执行异或运算的小程序,但我不知道在函数调用之后 b1 是否被更改。当我尝试执行 std::cout 时,程序不会打印任何内容。
#include <iostream>
#include <malloc.h>
#include <cstring>
void xorBlocks(char *b1, char *b2) {
for (int i = 0; i <5; i++) {
b1[i] ^= b2[i];
}
std::cout <<b1;
}
int main()
{
char* buffer = (char *) malloc(10);
char* previousBlock = (char *) malloc(10);
const char *iv = (const char *)"00111";
//printf(iv);
memcpy(previousBlock, iv, 5);
//printf(previousBlock);
memcpy(buffer, iv, 5);
//printf(buffer);
xorBlocks((char *) buffer, (char *) previousBlock);
return 0;
}
【问题讨论】:
-
所有
(char *)和(const char *)禁用类型安全。唯一需要的是malloc旁边的那些,但这里不应使用malloc。char buffer[10];要好得多,即使这样std::array<char, 10> buffer;也值得考虑。 -
b1和b2的第一个字节是 '0'(十进制 48)。 '0' xor '0' 计算结果为 0。因此 b1 的第一个字节变为 0,这意味着b1是一个空字符串,并且不打印任何内容。 -
x ^ x对于所有整数x为零。
标签: c++ pointers char-pointer