我正在尝试检查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码输入?
答案 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(¤t_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;
}
如果我没有错,那将继续工作,因为每个字符都是一个字节。您将一次从文件中读取每个字符一个字节。 如果仍然无法正常运行,是否可以以二进制模式重写文件?