c - 标准输出上的数据显示错误 : C File Operation

标签 c file-io

我编写了以下代码:

main()
{
    FILE *fp;
    fp=fopen("ftest.txt","r");
    char c, filestring[100];
    int i=0;
    while((c=getc(fp))!=EOF)
    {
        filestring[i]=c;
    }
    printf("str is %s",filestring);
    fclose(fp);
}

文件 ftest.txt 包含单词 Hello World。

enter image description here

显示的输出不正确,可能是其他字体或其他编码。

enter image description here

这是什么原因呢?我该如何解决这个问题?

同时,此代码运行良好(在标准输出上以“英语”显示输出):

 main()
    {
        FILE *fp;
        fp=fopen("ftest.txt","r");
        char c;
        while((c=getc(fp))!=EOF)
        {
            printf("%c",c);
        }
        fclose(fp);
    }

我需要第一个代码才能工作,因为我必须在文本文件中进行搜索。怎么解决这个问题?

问题与 Output is not displying correctly in file operation 不同因为我能够“显示”正确的输出(如第二个代码中所示),但我无法将文件的内容写入字符串。

我尝试过的事情:

1) 将文件打开模式从“r”更改为“rb”。

2) 将记事本编码更改为所有可用选项:ANSI、UTF 等。

最佳答案

答案有两部分:

  • 你永远不会增加i。这意味着您只是在 while 循环中覆盖相同的位置(数组中的第一个空格)。这就是为什么垃圾的第一个值是“d”(输入的最后一个字符)。

  • “d”后面的垃圾是因为数组从未初始化,这意味着那里已经存在永远不会被覆盖的随机垃圾。

另一个注意事项:第一种方法需要手动添加一个空字节 \0 到数组末尾(或者通过将整个内容初始化为 \0s或者就在读入最后一个字符之后。这样 printf 可以正确读取字符串。

关于c - 标准输出上的数据显示错误 : C File Operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955400/

相关文章:

c - 从 ./{base} < input.txt 中的多行输入获取数据的问题

python - 正则表达式的问题

python - BST 还是哈希表?

python - 使用 python 从不同的点开始遍历文件和列表?

java - 如何在 Camel 进程中访问资源中的文件?

java - 扫描文件时跳过空白行

谁能告诉我为什么这个函数没有将节点添加到最后,我该如何解决它?

c - 使用内核模块挂载文件系统

c - Delphi PerlRegEx : Link . 静态 obj 文件,因此它们不依赖于 msvcrt.dll

c - 访问我使用同一应用程序创建的文件时,Linux 中的权限被拒绝