Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言逐字打印文件(任意长度)_C_File - Fatal编程技术网

用C语言逐字打印文件(任意长度)

用C语言逐字打印文件(任意长度),c,file,C,File,有没有一种方法可以一个字符一个字符地打印整个文件,而不知道它的长度或担心它有多少行 现在我读取一个文件,并计算它有多少行,读取每一行,将其发送到一个操纵函数,打印出被操纵的字符串。我必须创建一个countline()函数和一个readLine()函数。只是想知道是否有更有效的方法。类似的方法应该可以: int ch = 0; while ( ch = fgetc(FILE_POINTER) != EOF ) { doSomething (ch); } 这样做应该可以: int ch =

有没有一种方法可以一个字符一个字符地打印整个文件,而不知道它的长度或担心它有多少行


现在我读取一个文件,并计算它有多少行,读取每一行,将其发送到一个操纵函数,打印出被操纵的字符串。我必须创建一个countline()函数和一个readLine()函数。只是想知道是否有更有效的方法。

类似的方法应该可以:

int ch = 0;
while ( ch = fgetc(FILE_POINTER) != EOF ) {
    doSomething (ch);
}

这样做应该可以:

int ch = 0;
while ( ch = fgetc(FILE_POINTER) != EOF ) {
    doSomething (ch);
}

为什么不使用fread呢。以下是一个例子:

/* fread example: read a complete file */
#include <stdio.h>
#include <stdlib.h>

int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  pFile = fopen ( "myfile.bin" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  /* the whole file is now loaded in the memory buffer. */

  // terminate
  fclose (pFile);
  free (buffer);
  return 0;
}
/*fread示例:读取完整文件*/
#包括
#包括
int main(){
文件*pFile;
长时间lSize;
字符*缓冲区;
结果的大小;
pFile=fopen(“myfile.bin”、“rb”);
如果(pFile==NULL){fputs(“文件错误”,stderr);退出(1);}
//获取文件大小:
fseek(pFile,0,SEEK_END);
lSize=ftell(pFile);
倒带(pFile);
//分配内存以包含整个文件:
缓冲区=(char*)malloc(sizeof(char)*lSize);
如果(buffer==NULL){fputs(“内存错误”,stderr);退出(2);}
//将文件复制到缓冲区:
结果=fread(缓冲区,1,lSize,pFile);
如果(result!=lSize){fputs(“读取错误”,stderr);退出(3);}
/*整个文件现在加载到内存缓冲区中*/
//终止
fclose(pFile);
自由(缓冲);
返回0;
}

注意:缓冲区保存文件的内容。

为什么不使用fread。以下是一个例子:

/* fread example: read a complete file */
#include <stdio.h>
#include <stdlib.h>

int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  pFile = fopen ( "myfile.bin" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  /* the whole file is now loaded in the memory buffer. */

  // terminate
  fclose (pFile);
  free (buffer);
  return 0;
}
/*fread示例:读取完整文件*/
#包括
#包括
int main(){
文件*pFile;
长时间lSize;
字符*缓冲区;
结果的大小;
pFile=fopen(“myfile.bin”、“rb”);
如果(pFile==NULL){fputs(“文件错误”,stderr);退出(1);}
//获取文件大小:
fseek(pFile,0,SEEK_END);
lSize=ftell(pFile);
倒带(pFile);
//分配内存以包含整个文件:
缓冲区=(char*)malloc(sizeof(char)*lSize);
如果(buffer==NULL){fputs(“内存错误”,stderr);退出(2);}
//将文件复制到缓冲区:
结果=fread(缓冲区,1,lSize,pFile);
如果(result!=lSize){fputs(“读取错误”,stderr);退出(3);}
/*整个文件现在加载到内存缓冲区中*/
//终止
fclose(pFile);
自由(缓冲);
返回0;
}

注意:缓冲区保存文件的内容。

您确实需要更具体一些。似乎您想要
cat文件
(linux)或
类型文件
(windows)。您确实需要更具体一些。看起来你想要
cat文件
(linux)或
类型文件
(windows)。但是,他明确要求“逐个字符”阅读。但是,他明确要求“逐个字符”阅读。@Brett Alton:如果你只关心每行的字符,而不关心换行符本身,请记住在读取这些字符时忽略对它们的处理(“\n”或“\r”\n”,具体取决于文件的格式)。@Brett Alton:如果您只关心每行上的字符,而不关心换行符本身,请记住在读取这些字符时忽略对它们的处理(“\n”或“\r”\n”,具体取决于文件的格式)。