我正在制作一个小程序来读取一个文件,该文件包含 UTF-8 元素,一个字符一个字符。读取一个字符后,它将它与其他几个字符进行比较,如果匹配,它将文件中的字符替换为下划线“_”。
(嗯,它实际上复制了那个文件,用下划线替换了特定的字母。)
我不确定我到底在哪里搞砸了,但它很可能无处不在。
这是我的代码:
FILE *fpi;
FILE *fpo;
char ifilename[FILENAME_MAX];
char ofilename[FILENAME_MAX];
wint_t sample;
fpi = fopen(ifilename, "rb");
fpo = fopen(ofilename, "wb");
while (!feof(fpi)) {
fread(&sample, sizeof(wchar_t*), 1, fpi);
if ((wcscmp(L"ά", &sample) == 0) || (wcscmp(L"ε", &sample) == 0) ) {
fwrite(L"_", sizeof(wchar_t*), 1, fpo);
} else {
fwrite(&sample, sizeof(wchar_t*), 1, fpo);
}
}
我省略了与文件名生成有关的代码,因为它对案例没有任何帮助。这只是字符串操作。
如果我给这个程序提供一个包含γειά σου κόσμε.
我希望它返回的单词的文件:
γει_ σου κόσμ_.
搜索互联网并没有太大帮助,因为大多数结果非常笼统或谈论关于 UTF-8 的完全不同的事情。就像没有人出于某种原因需要操纵单个字符。
任何指出我正确方法的东西都是最受欢迎的。我不一定要寻找我提交的代码的简单固定版本,如果有任何有见地的评论帮助我理解 wchar 机制的工作原理,我将不胜感激。整个 wbyte、wchar、L、no-L,对我来说都是一团糟。
预先感谢您的帮助。