C++ 用C/C++;
您好,我正在尝试使用文件输入流或某种类型读取此文本:C++ 用C/C++;,c++,c,C++,C,您好,我正在尝试使用文件输入流或某种类型读取此文本: E^@^@<a^R@^@@^FÌø<80>è^AÛ<80>è ^F \^DÔVn3Ï^@^@^@^@ ^B^VÐXâ^@^@^B^D^E´^D^B^H IQRÝ^@^@^@^@^A^C^C^GE^@^@<^@^@@^@@^F.^K<80>è ^F<80>è^AÛ^DÔ \»4³ÕVn3Ð ^R^V J ^@^@^B^D^E´^D^B^H ^@g<9f><8
E^@^@<a^R@^@@^FÌø<80>è^AÛ<80>è ^F \^DÔVn3Ï^@^@^@^@ ^B^VÐXâ^@^@^B^D^E´^D^B^H
IQRÝ^@^@^@^@^A^C^C^GE^@^@<^@^@@^@@^F.^K<80>è ^F<80>è^AÛ^DÔ \»4³ÕVn3Ð ^R^V J ^@^@^B^D^E´^D^B^H
^@g<9f><86>IQRÝ^A^C^C^GE^@^@4a^S@^@@^FÌÿ<80>è^AÛ<80>è ^F \^DÔVn3л4³Ö<80>^P^@.<8f>F^@^@^A^A^H
IQRÞ^@g<9f><86>E^@^A±,Q@^@@^F^@E<80>è ^F<80>è^AÛ^DÔ \»4³ÖVn3Ð<80>^X^@.^NU^@^@^A^A^H
^@g<9f><87>
E^@^@在我看来,它不像文本。因此,使用“r”
模式来fopen
,而不是“rt”
另外,^@
表示'\0'
,因此在任何情况下,您都可能会读取一组零。但不是所有的零。你的没有为我编译,但我做了一些修复,它就像雨一样正确;-)
#包含/*文件操作所需*/
int main(int argc,char*argv[]){
int n;
文件*fr;
无符号字符c;
如果(argc!=2){
perror(“用法:摘要”);
返回1;
}
fr=fopen(argv[1],“rt”);/*打开文件进行读取*/
虽然(!feof(fr)){//无法永久读取,但在读取完成时需要停止
//我的ubuntu没有读过stdio.h,但它有fread
fread(和c,sizeof(c),1,fr);
printf(“\n”,c);
}
fclose(fr);/*退出例程前关闭文件*/
}
您正在使用fopen()
打开文件,该文件返回一个文件*
,使用read()
读取该文件,该文件需要int
。您需要同时使用open()
和read()
,或者fopen()
和fread()
。你不能把这些混在一起
为了澄清这一点,fopen()
和fread()
使用了FILE
指针,这是一种不同于直接文件描述符的访问方式和抽象open()
和read()
使用“原始”文件描述符,这是操作系统可以理解的概念
虽然与此处的程序故障无关,但您的fclose()
调用也必须匹配。换句话说,fopen()
,fread()
,和fclose()
,或open()
,read()
,和close()
,文件的编码是什么?UTF8?Unicode?我不知道,怎么说?等等,你是在使用文件*
并将其传递给read()
read()
接受一个int fd
,除非这是某个平台不接受?首先在hex编辑器中打开它并发布十六进制输出。不确定…如果我想一次只读取一个字节,我该怎么做?您的文件中有零。使用hextump
或xxd
@SuperString转储文件:两个著名的程序转储文件内容的十六进制值。我猜这是一个输入错误,因为代码甚至不会按发布的方式编译open
将是一个未定义的标识符,因为它的头不包括在内,然后该参数将是错误的类型,并且无法隐式转换。@BenVoigt:既然您提到了它,那可能是对的。尽管如此,即使使用fread()
then,它至少应该运行并打印正确的东西;它就是不会终止,因为1==1
和所有这些。但你可能是对的。也许OP能给我们一些启示。
#include <stdio.h> /* required for file operations */
int main(int argc, char *argv[]){
int n;
FILE *fr;
unsigned char c;
if (argc != 2) {
perror("Usage: summary <FILE>");
return 1;
}
fr = fopen (argv[1], "rt"); /* open the file for reading */
while (1 == 1){
read(fr, &c, sizeof(c));
printf("<0x%x>\n", c);
}
fclose(fr); /* close the file prior to exiting the routine */
}
#include <stdio.h> /* required for file operations */
int main(int argc, char *argv[]){
int n;
FILE *fr;
unsigned char c;
if (argc != 2) {
perror("Usage: summary <FILE>");
return 1;
}
fr = fopen (argv[1], "rt"); /* open the file for reading */
while (!feof(fr)){ // can't read forever, need to stop when reading is done
// my ubuntu didn't have read in stdio.h, but it does have fread
fread(&c, sizeof(c),1, fr);
printf("<0x%x>\n", c);
}
fclose(fr); /* close the file prior to exiting the routine */
}