#include <stdio.h>
#include <string.h>
int main()
{
char greeting[]="\nHello World!\n";
int a;
for(int i=0; i<strlen(greeting); i++)
greeting[i]^=111;
for(int i=0; i<strlen(greeting); i++)
greeting[i]^=111;
printf("%s\n",greeting);
scanf("%d",&a);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Hell
Run Code Online (Sandbox Code Playgroud)
为什么在找到对应于XOR键编号的字母后切掉所有内容(在这种情况下,ASCII为'w')?在数理逻辑,N^N=0和0^N=N,不是吗?
zig*_*igg 56
因为'o'是ASCII码111,而带有111的XORing 111产生0 NUL,并且终止你的字符串.一旦发生这种情况(即使在第一个循环中,因为每次通过循环都会对其进行评估),strlen报告字符串会更短,并且循环停止.
在通过XOR之前保存字符串长度将使您免于此操作.
das*_*ght 10
这是因为当你自己对一个数字进行xor时,它变为零,当strlen看到零时,它认为它是字符串的结尾.
如果在第一个循环之前将长度存储在变量中,然后在第二个循环中使用保存的长度而不是strlen,则程序将生成预期结果.