今天搞代码的时候,遇到一个字符串处理的问题,需要在一个字符串里面找一个特定的字符,看看它一次出现的位置在哪。我记得之前用过类似的函数,但是一下子又想不起来具体叫啥,就去网上搜一下。
一开始我直接搜“字符串查找”,出来一堆 strchr、wcschr 之类的,看着有点懵。后来才想起来,我这项目好像是为兼容各种字符集,用挺多 TCHAR、_tc 开头的东西。估计字符串查找函数也有对应的“通用版本”。
摸索过程
果然,加上 _tcs 搜一下,就找到 _tcsrchr 这个函数。看网上的资料,它好像就是 strchr 和 wcschr 的“通用版本”,会根据项目设置的字符集自动选择用哪个函数。这下就方便多,不用我自己去判断用哪个。
找到函数之后,我就开始试着用。过程还算顺利,没遇到啥大问题。就是一开始参数没传对,找半天没找到我要的字符。后来仔细看下函数的说明,才发现是自己把要找的字符和字符串的位置搞反,改过来之后就正常。
这里也简单记录下 _tcsrchr 的用法,省得以后忘:
- 第一个参数是要查找的字符串。
- 第二个参数是要找的字符。
- 返回值是一个指针,指向字符串里一次出现这个字符的位置。如果没找到,就返回空指针(NULL)。
最终实现
也没啥复杂的,就是下面这几行代码:
c++
TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
TCHAR p = _tcsrchr(szFilePath, '\\');
if (p != NULL) {
// 找到,p 指向一个 '\\' 的位置
// ... 后续处理 ...
} else {
// 没找到
// ... 错误处理 ...
这段代码的功能是获取当前程序的文件路径,然后找到路径里一个反斜杠('\\')的位置,方便后续把文件名和路径分开。挺简单的一个功能,但是用 _tcsrchr 这个函数就省事多。
这回的小折腾还算顺利,也让我对 _tcsrchr 这个函数有更深的印象。以后再遇到类似的问题,应该就能直接想起来用。
把解决问题过程记录下来还是有用的,下次遇到相似的问题,直接翻翻自己的笔记就行!