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 */
  }