strcmp、fseek和ftell函数

1、函数strcmp用法:
  原型:extern int strcmp(char *s1,char * s2);
       
  用法:#include <string.h>
  或者  #include <string>
  加上  using namespace std;
 
  功能:比较字符串s1和s2。
 
  说明:
        当s1<s2时,返回值<0
        当s1=s2时,返回值=0    //注意相等返回值是0
        当s1>s2时,返回值>0
 
  举例:

      // strcmp.c
     
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s1="Hello, Programmers!";
        char *s2="Hello, programmers!";
        int r;
       
        clrscr();
       
        r=strcmp(s1,s2);
        if(!r)
          printf("s1 and s2 are identical");
        else
        if(r<0)
          printf("s1 less than s2");
        else
          printf("s1 greater than s2");
       

        getchar();
        return 0;
      }

注意,strcmp 的参数 可以理解成 :如果s1 - s2 = 0,则返回值是0; 如果s1 - s2 < 0, 则返回值小于0; 如果s1 - s2 > 0,则返回值大于0;

2、函数fseek用法:
int fseek(FILE *stream, long offset, int fromwhere);
第一个参数file指针
第二个参数移动的偏移量
第三个参数移动到哪里
分别用3个宏
SEEK_SET 既0 文件开头
SEEK_CUR 既1 文件当前位置
SEEK_END 既2 文件结尾
但不推荐用数字 最好用宏

简言之:
  fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;
  fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;
  fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处。
此函数常用来计算流的长度:
    int filesize = fseek( fp, 0, SEEK_END );
    fseek( fp, 0, SEEK_SET );
注意:
fseek(文件类型指针fp, 位移量,起始点);
函数功能:把与fp有关的文件位置指针放到一个指定位置。
其中,“位移量”是long型数据,它表示位置指针相对于“起始点”移动的字节数。
如果 位移量 是一个正数,表示从“起始点”开始往文件尾方向移动;如果 位移量 是一个负数,则表示从“起始点”开始往文件头方向移动。

3、ftell函数用法:
函数名: ftell
功  能: 返回当前文件指针    (注意:返回的是文件的指针,指向第几个字节)
用  法: long ftell(FILE *stream);
程序例:

#include <stdio.h>

int main(void)
{
   FILE *stream;

   stream = fopen("MYFILE.TXT", "w+");
   fprintf(stream, "This is a test");
   printf("The file pointer is at byte /
          %ld/n", ftell(stream));              //返回14
   fclose(stream);
   return 0;
}

ftell() 和 fseek() 用长整型表示文件内的偏移 (位置), 因此, 偏移量被限制在 20 亿 (231-1) 以内

综合程序例子:

#include "stdafx.h"
#include <stdio.h>
#include <process.h>

long filesize(FILE *stream);

int main(void)
{
 FILE *stream;
 
 stream = fopen("MYFILE.TXT", "w+");
 fprintf(stream, "This is a test");
 fflush(stream);
 fclose(stream);
 //上面的操作是首先打开文件,然后往文件里面写字符串;

 FILE *fp = fopen("MYFILE.TXT", "r");
 fseek(fp, 3, SEEK_SET);    //fseek可以改变文件指针的偏移;这里的设置就是把文件指针移到距离文件开头3个字节处;
 char buffer[128] = "";
 fread(buffer,1,20,fp);     //这里是读数据块到内存中,参数中1是数据块的字节长度,20是读取的字节块数据数;
 printf("%s/n",buffer);
 //上面的操作是把写在文件里面的字符串读到内存中;
 //printf("Filesize of MYFILE.TXT is %ld bytes/n", filesize(stream));
 
 fclose(fp);
 return 0;
}

long filesize(FILE *stream)
{
 long curpos, length;
 
 curpos = ftell(stream);           //curpos:14
 int a = fseek(stream, 0L, SEEK_END);
 length = ftell(stream);
 //printf("%s",curpos);
 int b = fseek(stream, curpos, SEEK_SET);
 return length;
}

注意,文件的读取,必须先从硬盘读到内存中,然后才能打印出来;比如printf()函数,只能打印出内存的东西,不能直接对硬盘文件操作;
曾经 FILE *p = NULL; 然后试图这样打印:printf(p);是不正确的;因为p是文件指针,不是内存指针;

你可能感兴趣的:(Stream,String,File,less,buffer,FP)