我正在为阿姆哈拉语(埃塞俄比亚广泛使用的语言之一)编写一个简单的 Caesar 实现。这是代码
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 运行它以查看它在哪里拾取额外的字符。但没有多大意义。这是我的问题:
- 为什么它对 0 到 5 键有效,但对以上无效?
- 它从哪里得到它为大于 5 的键打印的额外字符?
如果它有助于我机器上的 wchar 大小为 4 字节。
谢谢
编辑:
样本输入:
message: ተደለ
key: 6
output: ቶዶሎ 0010
output I expect ቶዶሎ
0010 与 unicode 表上没有相应符号的字符一样显示。
再次感谢。