_tcsstr的用法以及源码

来自:https://blog.csdn.net/liangyuannao/article/details/7925783

 

_tcsstr:字符串1在字符串2中首次出现的位置,未出现返回NULL值;

_tcsrchr:字符1 在字符串2中首次出现的位置,未出现返回NULL值

 

TCHAR字符串操作函数:
_tcslen(str) 获得字符串长度
_tcsrchr(str, L'\\') 反向搜索获得最后一个TCHAR的位置
_stprintf(TCHAR *buffer,const TCHAR *format [,argument] ... )获得一个格式化字符串
_tcsdup 给一个指针分配源字符串大小的内存并从源字符串copy值
_tcstok 按标记将字符串拆分
tcscpy 拷贝字符串

(_TCSRCHR(SZFILEPATH, _T('\\')))[1] = 0

char szFilePath[MAX_PATH];   GetModuleFileName(NULL, szFilePath, MAX_PATH);    (_tcsrchr(szFilePath, _T('\\')))[1] = 0;

 

 

这是一段获得程序当前目录的一段代码

这段代码很简单,唯一有点难度的就是最后一句(_tcsrchr(szFilePath, _T('\\')))[1] = 0;

其实这句可分解为两句话

char *ch = _tcsrchr(szFilePath, _T('\\'));查找最后一个\出现的位置,并返回\后面的字符(包括\)

ch[1] = 0;//NULL  通过操作来操作szFilePath = 将szFilePath截断,截断最后一个\后面的字符(不包括\)

#include <tchar.h>
TCHAR* _strstr(const TCHAR *s1, const TCHAR *s2)
{ 
 if (*s2 == '\0') /*如果s2为空,则返回s1*/ 
  return ((TCHAR *)s1); 
 for (; s1 != '\0'; ++s1) /*每次后移s1的位置,在新的位置进行下一次匹配*/ 
 { 
  const TCHAR *sc1, *sc2; 
  while((*s1 != *s2)&&(*s1 != '\0')) 
   ++s1; /*在s1中找到和s2第一个字符匹配的位置*/ 
  if (*s1 == '\0') /*如果找不到,说明s1现在的位置不匹配,退出循环进行下一次匹配*/ 
   break; 
  else /*如果找到和s2第一个字符匹配的位置,开始逐个匹配s2后面的字符*/ 
   for (sc1 = s1, sc2 = s2; sc1 !='\0'; ++sc1,++sc2) 
   { 
    if (*sc2 == '\0') /*如果匹配完毕,返回s1此时的位置*/ 
     return ((TCHAR *)s1); 
    else if (*sc1 != *sc2) /*如果后面有一个字符不匹配,说明s1现在的位置不匹配,退出循环进行下一次匹配*/ 
     break; 
   } 
 } 
 return (NULL) ; 
 }
posted @ 2020-10-10 15:19  宇宙之外  阅读(1083)  评论(0编辑  收藏  举报