gpt4 book ai didi

c - 为什么异或 c 中的字符串给我垃圾值?

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:25 25 4
gpt4 key购买 nike

我想制作一个简单的程序来执行以下操作,

  1. 从用户那里获取输入字符串,char ip[50]。
  2. 异或每个字符 包含字符“0”的字符串。
  3. 显示生成的 密文,char op[50]。

  4. 然后再次使用这个字符串 (op) 解密字符串并给出与输入字符串相同的输出。 char rv[50].

  5. 显示解密的文本。

因此,为此我编写了以下代码,

#include<stdio.h>
#include<string.h>
void main(){
int i=0,len;
char ip[50],op[50],rv[50],b='0';
printf("Enter the original text: ");
fgets(ip,50,stdin);
len=strlen(ip);
//ip is input text
//op is output cypher text
//rv is again the input text obtained by XORing '0'
while(i<len-1){
op[i]=(ip[i++]^b); //XORing the input character with '0' and storing it in output string ^__^
}
op[i]='\0';
printf("\nThe Cypher Text is: ");
i=0;
puts(op);
while(i<len-1){
printf("%c",op[i++]);
}
i=0;

while(i<len-1){
rv[i]=(op[i++]^b);//XORing the output text again in hope of getting the input text back -__-
}
rv[i]='\0';
printf("\nThe Original text again is: ");
puts(rv);
i=0;
printf("\n");
while(i<len-1){
printf("%c",rv[i++]);
}
}

但输出总是

输出

C:\Users\cypher>gcc cypher.c

C:\Users\cypher>a
Enter the original text: qwerty

The Cypher Text is: ▄AGUBD
▄AGUBD
The Original text again is: Ω∞qwer

Ω∞qwer

注意:使用 puts() 只是为了检查是否有任何错误。任何帮助将不胜感激,谢谢。

最佳答案

声明

op[i]=(ip[i++]^b); 

rv[i]=(op[i++]^b);  

调用未定义的行为,因为 op[i++]i 的副作用相对于 i 的值计算是无序的rv[i]

将它们更改为

op[i]=(ip[i]^b);
i++;

rv[i]=(op[i]^b);
i++;

关于c - 为什么异或 c 中的字符串给我垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com