c - 从 C 文件中读取 ASCII 字符

标签 c ascii

我正在打印文件中的前 128 个 ASCII 字符,然后尝试读取这些字符并打印出它们的 ASCII 十进制值。

我尝试使用 fread() 和 fscanf() 函数,但都在读取前 25 个字符后停止。

#include <stdio.h>
int main()
{
    int i;
    char ch;
    FILE *fp;
    fp=fopen("a.txt","w+");
    for(i=0;i<128;i++)
    {
        fprintf(fp,"%c",i);
    }
    fseek(fp,0,SEEK_SET);
    while(fread(&ch, sizeof(char), 1, fp))
        printf("%d\n",ch);
    return 0;
}

我希望输出是前 128 个 ASCII 字符的十进制值,但实际输出只有前 25 个 ASCII 字符的十进制值。

最佳答案

当您到达 26 时系统将该值视为文件结束标记。所有 128 个字节都已写入,但在读取时停止在值 0x1A 处(26).此行为适用于文本文件 (Windows)。

我以二进制模式打开文件,它运行正常。

fp = fopen("a.txt", "wb+");

如果tb mode 中未给出, 默认翻译模式由全局变量 _fmode 定义.

另外:你应该检查 fopen 的返回值.如果是NULL该文件无法打开。你应该fclose文件也是。

关于c - 从 C 文件中读取 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495807/

相关文章:

javascript - 无法使用请求模块处理 url

javascript - 我的JS在将ascii转换为字符串时添加一个空格

c - float 到 double (IEEE754) 转换

c++ - 用 OpenGL 模糊?

sql - 标准 SQL - CHAR 到 ASCII

c - 在 C 中使用 sprintf 进行十六进制到十进制的转换

c++ - 需要澄清这是否使用了 typedef

c - 递归查找数组中相同元素的数量

c - Ex 1-17 无限循环

c++ - 在控制台或窗口上显示 Unicode/ASCII 字符