x264.c中取后缀的代码,终于看明白了

#include "stdafx.h"
#include <string.h>
#include <iostream.h>

int main(int argc, char* argv[])
{
 /*
 char *psz_filename = NULL;
 char *psz;

 psz_filename = "abc.avi";
 psz = psz_filename + strlen(psz_filename) - 1;

 printf("psz_filename = %s\n",psz_filename);
 printf("psz = %s\n",psz);

 printf("-------------------------\n");

    while( psz > psz_filename && *psz != '.' )
 {
  //printf("psz = %s\n",psz);
  psz--;
  printf("psz = %s\n",psz); 
 }

 printf("-------------------------\n");
 printf("psz = %s\n",psz);


 printf("-------------------------\n");
 */


 char *tmp1 = NULL;
 char *tmp;
 tmp1 = "abcdefg.yuv";
 tmp = tmp1 + strlen(tmp1) - 1; //这是内存地址的运算
         //把指针移到最后一个字符'v'处

 cout<<"tmp1   = " <<tmp1 <<"\n";
 cout<<"tmp    = " <<tmp  <<"\n";
 cout<<"*tmp1  = " <<*tmp1<<"\n";
 cout<<"-------------------------------------------------------"<<"\n\n\n";


 cout<<"指针             "<<"值(地址)"    <<"    *(tmp-n)"    <<"\n";
 cout<<"\n";
 cout<<"tmp1          : "<<&tmp1<<"\n";
 cout<<"tmp           : "<<&tmp     << "  " << *(tmp-0)    <<"\n";
 cout<<"\n";
 cout<<"&tmp-1        : "<< &tmp-1   << "  " << *(tmp-1 )  <<"\n";
 cout<<"&tmp-2        : "<< &tmp-2   << "  " << *(tmp-2 )  <<"\n";
 cout<<"&tmp-3        : "<< &tmp-3   << "  " << *(tmp-3 )  <<"\n";
 cout<<"&tmp-4        : "<< &tmp-4   << "  " << *(tmp-4 )  <<"\n";
 cout<<"&tmp-5        : "<< &tmp-5   << "  " << *(tmp-5 )  <<"\n";
 cout<<"&tmp-6        : "<< &tmp-6   << "  " << *(tmp-6 )  <<"\n";
 cout<<"&tmp-7        : "<< &tmp-7   << "  " << *(tmp-7 )  <<"\n";
 cout<<"&tmp-8        : "<< &tmp-8   << "  " << *(tmp-8 )  <<"\n";
 cout<<"&tmp-9        : "<< &tmp-9   << "  " << *(tmp-9 )  <<"\n";
 cout<<"&tmp-10       : "<< &tmp-10  << "  " << *(tmp-10)  <<"\n";
 cout<<"&tmp-11       : "<< &tmp-11  << "  " << *(tmp-11)  <<"\n";

 cout<<"-------------------------------------------------------"<<"\n\n\n";

 cout<<"*tmp          : "<<*tmp <<"\n";//此时tmp指向'v'
 cout<<"tmp-1         : "<< tmp-1 <<"\n";//此时tmp指向'v'
 cout<<"tmp-2         : "<< tmp-2 <<"\n";//此时tmp指向'v'
 cout<<"tmp-3         : "<< tmp-3 <<"\n";//此时tmp指向'v'
 cout<<"tmp-4         : "<< tmp-4 <<"\n";//此时tmp指向'v'
 cout<<"tmp-5         : "<< tmp-5 <<"\n";//此时tmp指向'v'
 cout<<"tmp-6         : "<< tmp-6 <<"\n";//此时tmp指向'v'
 cout<<"tmp-7         : "<< tmp-7 <<"\n";//此时tmp指向'v'
 cout<<"tmp-8         : "<< tmp-8 <<"\n";//此时tmp指向'v'
 cout<<"tmp-9         : "<< tmp-9 <<"\n";//此时tmp指向'v'
 cout<<"tmp-10        : "<< tmp-10 <<"\n";//此时tmp指向'v'
 cout<<"tmp-11        : "<< tmp-11 <<"\n";//此时输出空

 cout<<"-------------------------------------------------------"<<"\n\n\n";

 char *tmp0;
 while (tmp > tmp1 && *tmp != '.') /* “*tmp”是取值,tmp是指针,*tmp只代表一个字符 */
 {
 cout<<"*tmp :"<< *tmp <<"\n";  /* 此时tmp指向最后一个字符v */
 tmp0 = tmp--;
 cout<<"                         tmp0的内存地址:"<<&tmp0<<"\n";
 }


 char * t  = "\
此例子证明了以下内容:\n\
打印一个char * 变量,它是按字符串输出的,如上面的: \
\n  cout << \"tmp1   = \" <<  tmp1;   //abcdefg.yuv\
\n如果把这个char * 变量当成地址,用*取值,仅能输出一个字符,如上面的: \
\n  cout << \"*tmp1  = \" << *tmp1;  //a";
 cout << t << "\n";
 //printf("%s\n",tmp);
 //printf("Hello World!\n");
 return 0;
}

运行结果:

x264.c中取后缀的代码,终于看明白了

 

x264.c中取后缀的代码,终于看明白了
 
就解释了x264.c中取后缀名的代码: