x264.c中:
static int Parse( int argc, char **argv,
x264_param_t *param, cli_opt_t *opt )
{
char *psz_filename = NULL; /* 用来存解析到的文件名 */
char *psz;
psz_filename = argv[optind++]; /* 文件名 */
psz = psz_filename + strlen(psz_filename) - 1;
while( psz > psz_filename && *psz != '.' )
{
psz--; /* psz是什么类型啊,怎么--了 */
}
这儿很乱啊
psz_filename 是char *
psz 是char *
psz = psz_filename + strlen(psz_filename) - 1; //这句和unsigned int 相加, 和1相减
那psz是char * , 右边是 char * + unsigned int - int
这个结果就算不出错,也没什么用啊,奇怪,从后续代码看来,这个while循环是取文件名的后缀,即点及点后面的部分。
![psz_filename = argv[optind++]; - 加菲 - . psz_filename = argv[optind++]; - 加菲 - .](http://img.ph.126.net/_L2ixNOMa2HFratKxgu05Q==/2614339583705492403.jpg)
但是要取后缀,完全不用这样麻烦啊,
![psz_filename = argv[optind++]; - 加菲 - . psz_filename = argv[optind++]; - 加菲 - .](http://img.ph.126.net/vQq61l78djLQX3VQ0XkUVg==/2558889013293490578.jpg)
![psz_filename = argv[optind++]; - 加菲 - . psz_filename = argv[optind++]; - 加菲 - .](http://img.ph.126.net/Ot45SSL9VK8zS7d2XnfNbQ==/2804616667961892288.jpg)
#include "stdafx.h" int main(int argc, char* argv[])
printf("Hello World!\n"); |
int main(int argc, char* argv[]) psz_filename = "abc.avi"; while( psz > psz_filename && *psz != '.' )
|
运行效果如图: ![]() |
#include "stdafx.h" int main(int argc, char* argv[]) psz_filename = "abc.avi"; printf("psz_filename = %s\n",psz_filename); printf("-------------------------\n"); while( psz > psz_filename && *psz != '.' ) printf("-------------------------\n");
|
![]() 去掉while与psz--之间的print: ![]() |