在C中的ASCII文件中查找不可打印的ASCII字符

时间:2018-07-12 14:31:55

标签: c ascii

我正在尝试检查ASCII文件中是否出现不可打印的字符(不包括ASCII代码10或13)。总体思路是,该程序检查输入的文件以确保其符合格式要求,其中之一仅使用可打印的ASCII字符。目前,我的代码如下所示:

FILE *input_check;
int current_line = 1;
int current_char;

/* opens a new file stream*/
input_check = fopen(filename, "r");

/* Gets the first character*/
current_char = fgetc(input_check);

while (current_char != EOF) {
    if (current_char == 10 || current_char == 13) ++current_line;

    if (current_char < 32 && current_char != 10 && current_char != 13) {
        printf("Found non-printable character with ASCII code %d on line %d 
                    \n", current_char, current_line);
    }

    current_char = fgetc(input_check);
}

fclose(input_check);

我尝试将制表符放入ASCII文件中以捕获它们,但是输入流将它们视为空格,并将任何连续的空格视为一个字符。有没有办法确保每个字符都用其原始ASCII码输入?

1 个答案:

答案 0 :(得分:1)

因此,考虑到C语言,您可以采用一种方式将文件读取为二进制文件。 读取每个字符的方式:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) { 
FILE *fileptr;
int current_char;
int current_line = 0;
int i;

fileptr = fopen(argv[1], "rb");         


while (fread(&current_char, 1, 1, fileptr) == 1) {
    if (current_char == 10 || current_char == 13) ++current_line;

    if (current_char < 32 && current_char != 10 && current_char != 13) {
        printf("Found non-printable character with ASCII code %d on line %d 
                    \n", current_char, current_line);
    }


}  
fclose(fileptr); 
return 0;
}

如果我没有错,那将继续工作,因为每个字符都是一个字节。您将一次从文件中读取每个字符一个字节。 如果仍然无法正常运行,是否可以以二进制模式重写文件?