从文件中读取日语字符时出现问题-C

根0x

我正在编写一个程序,该程序读取几乎200万行的文件。该文件的格式为“整数ID”标签,带有艺术家姓名字符串。

6821361 Selinsgrove High School Chorus
10151460    greek-Antique
10236365    jnr walker & the all-stars
6878792 Grieg - Kraggerud, Kjekshus
6880556 Mr. Oiseau
6906305 stars on 54 (maxi single)
10584525    Jonie Mitchel
10299729    エリス レジーナ/アントニオ カルロス ジョビン

上面是一个示例,其中包含文件中的某些项目(某些行未遵循特定格式)。我的程序工作文件,直到到达示例的最后一行,然后不断打印エリス レジーナ/アントニオ カルロス ジョビ\343\203

struct artist *read_artists(char *fname)
{
    FILE *file;
    struct artist *temp = (struct artist*)malloc(sizeof(struct artist));
    struct artist *head = (struct artist*)malloc(sizeof(struct artist));
    file = fopen("/Users/Daniel/Library/Developer/Xcode/DerivedData/project_Audioscrobbler_Artists-hgwyqpinuoxayzbmvarcjxryqnrz/Build/Products/Debug/artist_data.txt", "r");
    if(file == 0)
    {
        perror("fopen");
        exit(1);
    }
    int artist_ID;
    char artist_name[650];
    while(!feof(file))
    {
        fscanf(file, "%d\t%65[^\t\n]\n", &artist_ID, artist_name);
        temp = create_play(artist_ID, artist_name, 0, -1);
        head = add_play(head, temp);
        printf("%s\n", artist_name);
    }
    fclose(file);
    //print_plays(head);
    return head;
}

上面是我从文件中读取的代码。您能帮忙解释一下哪里出了问题吗?

雷克

正如评论所指出的那样,while(!feof(file))问题是链接的内容将详细解释为什么这不是一个好主意,但总的来说,引用链接中的答案之一:

(!feof(文件))...

...是错误的,因为它会测试不相关的内容,而不会测试您需要了解的内容。结果是您错误地执行了假定代码正在访问已成功读取的数据的代码,而实际上却从未发生过。-Kerrek SB

就您而言,这种用法不会引起您的问题,但是正如Kerrek解释的那样,请掩盖它。

您可以将其替换为fgets(...)

char lineBuf[1000];//make length longer or shorter for your purpose
file = fopen("/Users/Daniel/Library/Developer/Xcode/DerivedData/project_Audioscrobbler_Artists-hgwyqpinuoxayzbmvarcjxryqnrz/Build/Products/Debug/artist_data.txt", "r");
if(!file) return -1;
while(fgets (lineBuf, sizeof(lineBuf), file))
{
    //process each line here
    //But processing Japanese characters
    //will require special considerations.
    //Refer to the link below for UNICODE tips
}

C和C ++中的Unicode ...

特别是,您将需要使用足以包含将要处理的不同大小字符的变量类型。该链接对此进行了详细讨论。

这是节选:

"char" no longer means character
I hereby recommend referring to character codes in C programs using a 32-bit unsigned integer type. Many platforms provide a

“ wchar_t”(宽字符)类型,但是不幸的是,要避免使用它,因为某些编译器仅分配16位,不足以表示Unicode。无论何时需要传递单个字符,都可以将“ char”更改为“ unsigned int”或类似字符。“ char”类型的唯一剩余用途是表示“ byte”。

编辑:
在上面的注释中,您声明但失败的字符串是66个字节长因为您正在读一个'char'数组,所以完成字符所需的字节在包含最后一个必需字节之前被截断了一个字节。ASCII字符可以包含在一个char空格中。日语字符不能。如果您使用的是unsigned int而不是的数组char,则最后一个字节将被包括在内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中读取Gzip文件时出现问题

来自分类Dev

读取C txt文件时出现问题

来自分类Dev

在C中的结构化列表中将stdin作为文件读取时出现问题

来自分类Dev

尝试从C#中的共享点/网络位置读取文件时出现问题

来自分类Dev

在 C++ 中读取文件、搜索和显示信息到结构数组时出现问题

来自分类Dev

使用fscanf读取C中的坐标时出现问题

来自分类Dev

从C中的文件扫描字符矩阵时出现问题

来自分类Dev

在Linux上的C中打开文件时出现问题

来自分类Dev

在C#中读取CSV文件时出现编码字符串问题

来自分类Dev

C编程:读取文件文本并尝试找出最长的单词时出现问题

来自分类Dev

在C中读取字符串以防止出现问题的正确方法是什么

来自分类Dev

在C ++中读取unicode输入时出现问题

来自分类Dev

检查字符串是否为c中的数字时出现问题

来自分类Dev

打印正确数量的相同字符时出现问题.C中的RLE

来自分类Dev

C:比较函数中的两个字符串时出现问题

来自分类Dev

将输出C程序保存在文件中时出现问题

来自分类Dev

在C函数中修改指针时出现问题

来自分类Dev

在C ++中返回对象时出现问题

来自分类Dev

在C ++中调用system()时出现问题

来自分类Dev

在C ++中返回对象时出现问题

来自分类Dev

读取BMP文件C ++(读取BMP标头出现问题)

来自分类Dev

在视觉C ++文件读取中出现垃圾字符问题

来自分类Dev

C ++合并文件出现问题

来自分类Dev

使用fscanf读取C语言中的坐标时出现问题

来自分类Dev

C ++:从二进制文件读取输入时出现问题

来自分类Dev

C ++:将字符串复制到字符数组时出现问题

来自分类Dev

从C中的名称文件读取字符串时遇到问题

来自分类Dev

在C中输出出现问题

来自分类Dev

读取txt文件时出现问题(带引号的字符串中的EOF)

Related 相关文章

  1. 1

    在C#中读取Gzip文件时出现问题

  2. 2

    读取C txt文件时出现问题

  3. 3

    在C中的结构化列表中将stdin作为文件读取时出现问题

  4. 4

    尝试从C#中的共享点/网络位置读取文件时出现问题

  5. 5

    在 C++ 中读取文件、搜索和显示信息到结构数组时出现问题

  6. 6

    使用fscanf读取C中的坐标时出现问题

  7. 7

    从C中的文件扫描字符矩阵时出现问题

  8. 8

    在Linux上的C中打开文件时出现问题

  9. 9

    在C#中读取CSV文件时出现编码字符串问题

  10. 10

    C编程:读取文件文本并尝试找出最长的单词时出现问题

  11. 11

    在C中读取字符串以防止出现问题的正确方法是什么

  12. 12

    在C ++中读取unicode输入时出现问题

  13. 13

    检查字符串是否为c中的数字时出现问题

  14. 14

    打印正确数量的相同字符时出现问题.C中的RLE

  15. 15

    C:比较函数中的两个字符串时出现问题

  16. 16

    将输出C程序保存在文件中时出现问题

  17. 17

    在C函数中修改指针时出现问题

  18. 18

    在C ++中返回对象时出现问题

  19. 19

    在C ++中调用system()时出现问题

  20. 20

    在C ++中返回对象时出现问题

  21. 21

    读取BMP文件C ++(读取BMP标头出现问题)

  22. 22

    在视觉C ++文件读取中出现垃圾字符问题

  23. 23

    C ++合并文件出现问题

  24. 24

    使用fscanf读取C语言中的坐标时出现问题

  25. 25

    C ++:从二进制文件读取输入时出现问题

  26. 26

    C ++:将字符串复制到字符数组时出现问题

  27. 27

    从C中的名称文件读取字符串时遇到问题

  28. 28

    在C中输出出现问题

  29. 29

    读取txt文件时出现问题(带引号的字符串中的EOF)

热门标签

归档