c - 使用文件和列表修改 C 中的字符

标签 c unicode io text-files special-characters

我需要获得正确的波兰语字符“ąężźćśół”。我使用了一些解决方案,例如 setlocalesystem chcpwchar_t。只要我不使用文件/列表,一切都会顺利。 wscanfwprintfwchar_t 完美运行。

但是,如果我尝试从文件中读取某些内容并将其保存到列表中(即使是数组),然后尝试将其显示到屏幕上,我将无法获得正确的波兰语字符,并且在出现以下情况时列表中,我时不时会得到不同的结果,例如 z`A2 ,就像来自无处的随机字符。我一直试图通过使用带有 w(wide) 变体的 fscanffgets 来获得良好的结果,但它不起作用。我是不是搞错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

struct dyk{
    wchar_t line[200];                             
    struct dyk *next;                             
};

typedef struct dyk dyk;


void printdyk(char name[100]){
    dyk *wyp;
    wyp = malloc(sizeof(dyk));
    wchar_t yt[100];
    FILE *dyktando;
    dyktando = fopen(name, "r+");
    if(dyktando == NULL){
        wprintf(L"Błąd otwarcia pliku!\n");                 //Can't open file
    }else{
        fgets(&wyp->line, sizeof(dyk), dyktando);           //reading from file and send to the list
        wprintf(L"%s\n", wyp->line);                        //write text from the list on the screen
        wchar_t yt[100];
        wscanf(L"%s", &yt);                                 //testing strings comparing, so I have to put some variables
        int n=strcmp(yt, wyp->line);                        //str compare
        printf("%d", n);                                //result, it gives me -1 every time
    }
    fclose(dyktando);
}

我用只包含一个字符“ż”的txt文件测试了函数。无法正确读取文件。在主函数的开头我放置了这两行:

system("chcp 852");
setlocale(LC_ALL, ".852");

我正在使用代码块、mingw32-gcc 编译器,并且没有标志。

最佳答案

您没有使用wchar_t代码中随处可见的兼容函数。特别是:

fgets(&wyp->line, sizeof(dyk), dyktando);           //reading from file and send to the list

wchar_t兼容版本是 fgetws 。另外,wyp->line (没有 & 运算符)是正确的参数。

int n=strcmp(yt, wyp->line);                        //str compare

wcscmp 应该使用它来代替。

另请注意 sizeofwchar_t上当函数期望长度为字符而不是字节时,数组不正确(如fgetws)。

关于c - 使用文件和列表修改 C 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200889/

相关文章:

c - 我可以删除最后一个 if 语句吗?

python 3 : How to specify stdin encoding

java - Android:无法读取用户使用 URI 中的 getString() 和 getPath() 选择的 PDF 文件

python - 退格键似乎在 python 中不起作用

python - Python 上确定是否由于内部条件在最后一次元素迭代中发生中断的最佳方法是什么?

c - 对 bool 值的读/写访问是否需要信号量

sql-server - 将 unicode 转义序列数据插入 SQL Server 数据库 (pyodbc)

c - read() 无法正常工作

C |静态数组: why does writing out-of-bounds not result in exception?

php - 如何使用PHP在邮件主题中发送带有二进制字的邮件