我正在尝试检查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码输入的?
最佳答案
所以,有一种方法你可以这么做,考虑到它是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;
}
如果我没有荒谬的错误,这将继续工作,因为每个字符是一个字节。您将一次从文件中读取一个字节中的每个字符。
如果不起作用,文件是否可以在二进制模式下重写?
关于c - 在C中的ASCII文件中查找不可打印的ASCII字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51308312/