我们需要检查文件是否包含非 ASCII 字节。编写一个 C 程序它接受一个参数,一个文件名。它应该打印一行输出。如果文件包含非 ASCII 字节,non_ascii.c应打印第一个非 ASCII 字节的位置。使用与以下示例相同的格式。如果文件不包含非 ASCII 字节,non_ascii.c则应打印一条消息指示这一点。再次使用与以下示例相同的格式。如果一个字节包含 128..255 之间的值,则假定它是非 ASCII 字节。
代码如下:
#include <stdio.h>
#include <stdlib.h>
//buf是存储文件的缓冲区,lSize是文件大小
char* textFileRead(char* filename,int *lSize)
{
char* buf;
FILE *pf = fopen(filename,"r");
if(pf == 0)
{
printf("文件打开失败");
return 0;
}
fseek(pf,0,SEEK_END);
*lSize = ftell(pf);
// 用完后需要将内存free掉
rewind(pf);
buf = (char*)malloc(*lSize+1);
*lSize = fread(buf,sizeof(char),*lSize,pf);
buf[*lSize] = '\0';
fclose(pf);
return buf;
}
int main(int argc, char *argv[])
{
char* buf;
int i,len,cnt = 0;
if(argc != 2)
{
printf("参数不符合要求");
return 0;
}
buf = textFileRead(argv[1],&len);
for (i=0;i<len;i++)
{
if (buf[i] >= 0 && buf[i] < 128)
{
//do nothing
}else
{
cnt++;
printf("%s: byte %d is non-ASCII\n",argv[1],i);
break;
}
}
if(cnt == 0)
printf("%s is all ASCII\n",argv[1]);
free(buf);
buf = 0;
return 0;
}
用fopen打开文件,fread读取所有字节到字符串,然后逐个字符检查其ASCII码是否大于0x80就行了