gpt4 book ai didi

c - 用 C 语言实现简单凯撒密码的 wchar

转载 作者:行者123 更新时间:2023-11-30 17:40:20 25 4
gpt4 key购买 nike

我正在为阿姆哈拉语(埃塞俄比亚广泛使用的语言之一)编写一个简单的凯撒实现。这是代码

main(){
setlocale(LC_ALL, " ");
int i, key=0;
wchar_t message[20];
wprintf(L"Enter message:>");
fgetws(message, sizeof(message), stdin);
wprintf(L"Enter cipher key:>");
wscanf(L"%d", &key);
/* basic input validation goes here */
for(i=0;message[i]!='\0'; i++){
message[i]=message[i]+key;
}
wprintf(L"The cipher is: %ls", message);
wprintf(L"\n");
return 0;
}

代码编译时没有警告。如果 key 小于或等于 5,则工作正常。当 key value 为 6 及以上时,问题就会出现。据我测试,它会打印一个额外的字符。我通过 gdb 运行它,看看它在哪里获取了额外的字符。但没有多大意义。这是我的问题:

  1. 为什么它适用于 0 到 5 键,但不适用于以上键?
  2. 它从哪里获得为大于 5 的键打印的附加字符?

如果有帮助的话,我的机器上的 wchar 大小是 4 字节。

谢谢

编辑:

示例输入:

                message: ተደለ
key: 6
output: ቶዶሎ 0010
output I expect ቶዶሎ

0010 的显示方式与 Unicode 表中没有相应符号的字符类似。

再次感谢。

最佳答案

您看到的额外字符是宽字符换行符 (0x000a),它保留在您使用 fgetws 读取的字符串末尾,并且移位 6字符,结果为 0x0010。这似乎不是可打印的字符,终端决定将字符代码打印为纯十六进制数字。

在移动之前删除尾随换行符或仅移动可打印字符。

关于c - 用 C 语言实现简单凯撒密码的 wchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21545477/

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