gpt4 book ai didi

c - 需要 strlen 帮助

转载 作者:行者123 更新时间:2023-11-30 21:17:28 24 4
gpt4 key购买 nike

我遇到了一个问题,我想知道你们中的任何人是否可以解决它,我们将不胜感激!

我正在尝试加密消息以发送给游戏中的人员

问题:当我尝试发送消息时,第一次会正常工作并在信件上显示文本,第二次会显示加密文本,但我不希望人们看到

("ZFDKWEK,CSJ,$MS(,,,)")

if (MessageEnc)
{
if (GET_GAME_TIMER() >= destroy_tick2){
destroy_tick2 = GET_GAME_TIMER() + 82000;
int i = 0;
for (i = 0;i<18;i++)
{
if (i == PlayerId()) continue;
int Handle = GetPlayerHandle(i);
if(!DoesEntityExist(Handle)) continue;
char key = 'j'; //Key
char *encMess = "ZFDKWEK,CSJ,$MS(,,,)";

for (int i = 0; i < strlen(encMess); i++)
{
encMess[i] ^= key;
}
char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", encMess);
NETWORK::NETWORK_HANDLE_FROM_PLAYER(i, &networkHandle, 13);
NETWORK::NETWORK_SEND_TEXT_MESSAGE(buf, &networkHandle);
printf(encMess);
}
}
}

最佳答案

您的 XOR 操作是在每次奇数迭代中加密静态字符串文字,然后在偶数迭代中解密它。使用 tmp 缓冲区以避免修改字符串文字。我不记得这些规则,但我认为尝试修改字符串文字的内存内容正在进入未定义行为领域。因此,最好从一开始就避免这种类型的编码。

更改这组代码:

char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z";

for (int i = 0; i < strlen(encMess); i++)
{
encMess[i] ^= key;
}

char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", encMess);

对此:

char tmp[64];
const char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z";

strcpy(tmp, encMess, 64);
size_t len = strlen(encMess);

for (int i = 0; i < len; i++)
{
tmp[i] ^= key;
}

char buf[64];
snprintf(buf, sizeof(buf), "~r~%s", tmp);

关于c - 需要 strlen 帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255186/

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