エチオピアで広く話されている言語の 1 つであるアムハラ語の簡単なシーザー実装を作成しています。ここにコードがあります
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;
}
コードは警告なしでコンパイルされます。キーが 5 以下の場合は問題なく動作します。キーの値が 6 以上の場合に問題が発生します。私がテストした限り、追加の文字が1つ出力されます。gdb を実行して、追加の文字がどこで取得されているかを確認しました。しかし、あまり意味がありませんでした。ここに私の質問があります:
- 0 から 5 のキーでは機能するのに、それより上では機能しないのはなぜですか?
- 5 より大きいキーに対して出力する追加の文字はどこで取得しますか?
それが役立つ場合、私のマシンの wchar のサイズは 4 バイトです。
ありがとうございました
編集:
サンプル入力:
message: ተደለ
key: 6
output: ቶዶሎ 0010
output I expect ቶዶሎ
0010 は、Unicode テーブルに対応する記号がない文字のように表示されます。
再度、感謝します。