CString查找

zhuyf87 2013-01-15 04:35:55
CString str = _T("C:\Users\Administrator\Desktop\手持上传数据_20130111144101_036936929269.zip");
int find = str.ReverseFind(_T('\'));

我想查找str字符串中的最后一个\的位置,使用CString类的ReverseFind函数。
但是参数设置为_T('\'),编译器就会把\当成转义字符,或者字符串连接符?反正是编译错误:
error C2001: newline in constant
fatal error C1057: unexpected end of file in macro expansion

如果ReverseFind的参数设置为_T('\\'),则ReverseFind返回-1,应该是没找到的意思。

我想设置成_T("\\"),但是ReverseFind好像只支持查找字符,不支持查找字符串,还是编译错误。
问题应该挺简单,请大家帮忙。应该怎么搞?谢谢。-_-
...全文
305 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ansien 2013-06-02
  • 打赏
  • 举报
回复
引用 16 楼 zhuyf87 的回复:
多谢 happyparrot。 我已经知道为什么了。 谢谢。
求解释,怎么搞定的?
  • 打赏
  • 举报
回复
引用 9 楼 zhuyf87 的回复:
引用 8 楼 happyparrot 的回复:\\是在写代码中用的,而在内存中只有一个\字符。 其它程序传给你的是什么样的,再仔细调试一下看看吧。没有道理不行啊 其实我是写的一个ATL COM程序,给平台端调用,其中有一个函数,会传入一个字符串参数,现在平台的同事传给我的字符串就是:C:\Users\Administrator\Desktop\手持上传数据_201……
那你就不用管了
Li_Carey 2013-01-15
  • 打赏
  • 举报
回复
肯定是写成int find = str.ReverseFind(_T('\\'));返回-1,说明没找到,那肯定是字符串有问题...
快乐鹦鹉 2013-01-15
  • 打赏
  • 举报
回复
引用 16 楼 zhuyf87 的回复:
多谢 happyparrot。 我已经知道为什么了。 谢谢。
哦?说一说。
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
多谢 happyparrot。 我已经知道为什么了。 谢谢。
快乐鹦鹉 2013-01-15
  • 打赏
  • 举报
回复
如果单斜杠是你debug时看到的字符串信息,应该是正确的。至于查找失败,也许是其它原因。楼主还需要仔细找找,这可能和其它你未表达出来的信息有关。
快乐鹦鹉 2013-01-15
  • 打赏
  • 举报
回复
引用 9 楼 zhuyf87 的回复:
引用 8 楼 happyparrot 的回复:\\是在写代码中用的,而在内存中只有一个\字符。 其它程序传给你的是什么样的,再仔细调试一下看看吧。没有道理不行啊 其实我是写的一个ATL COM程序,给平台端调用,其中有一个函数,会传入一个字符串参数,现在平台的同事传给我的字符串就是:C:\Users\Administrator\Desktop\手持上传数据_201……
这个肯定是不需要的。不是代码直接写的字符串信息,不需要做这样的处理,只有你在代码中手工写的字符串,需要如此处理,因为转义符是编译态是需要指定的。
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
呃。希望大家详细看一下我的问题。我知道写路径的时候要写双斜杠。 但现在这个字符串并不是我自己写的,是别人传给我的,传给我时,已经就是单斜杠了。
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
不然这个参数到我这,直接\就当做转移字符了。
lgstudyvc 2013-01-15
  • 打赏
  • 举报
回复
引用 4 楼 akirya 的回复:
改为 C/C++ code ? 12 CString str = _T("C:\\Users\\Administrator\\Desktop\\手持上传数据_20130111144101_036936929269.zip"); str.ReverseFind(_T('\\'));
傻X 2013-01-15
  • 打赏
  • 举报
回复
楼主,字符串注意转义符
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
引用 8 楼 happyparrot 的回复:
\\是在写代码中用的,而在内存中只有一个\字符。 其它程序传给你的是什么样的,再仔细调试一下看看吧。没有道理不行啊
其实我是写的一个ATL COM程序,给平台端调用,其中有一个函数,会传入一个字符串参数,现在平台的同事传给我的字符串就是:C:\Users\Administrator\Desktop\手持上传数据_20130111144101_036936929269.zip 赋值给我的函数的字符串参数,我是不是需要同事在传入这个参数的时候,他那边将\替换为\\?
快乐鹦鹉 2013-01-15
  • 打赏
  • 举报
回复
\\是在写代码中用的,而在内存中只有一个\字符。 其它程序传给你的是什么样的,再仔细调试一下看看吧。没有道理不行啊
快乐鹦鹉 2013-01-15
  • 打赏
  • 举报
回复
写在字符串中的\是个转义字符,单个使用时就表示后一个字符是转义符。如果你想在字符串中表达实际的\字符,就需要写成\\才行 处理如楼上
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
你是说要写为:CString str = _T("C:\\Users\\Administrator\\Desktop\\手持上传数据_20130111144101_036936929269.zip");吗? 我这里没具体说明,实际上这个str并不是我自己生成或者决定的。 是其他程序传给我的,里面就是单个反斜杠。 我需要在ReverseFind之前,先把\ Replace成\\?
jimette 2013-01-15
  • 打赏
  • 举报
回复
ls正解!!!!!!!!
  • 打赏
  • 举报
回复
改为
CString str = _T("C:\\Users\\Administrator\\Desktop\\手持上传数据_20130111144101_036936929269.zip");
str.ReverseFind(_T('\\'));
zhuyf87 2013-01-15
  • 打赏
  • 举报
回复
引用 1 楼 hfz8867879 的回复:
CString str = _T("C:\Users\Administrator\Desktop\手持上传数据_20130111144101_036936929269.zip"); 你是这里错了
这里错了是指?
九州剑王 2013-01-15
  • 打赏
  • 举报
回复
如果ReverseFind的参数设置为_T('\\'),则ReverseFind返回-1,应该是没找到的意思。 这个是对的
九州剑王 2013-01-15
  • 打赏
  • 举报
回复
CString str = _T("C:\Users\Administrator\Desktop\手持上传数据_20130111144101_036936929269.zip"); 你是这里错了
GPRS收发短信原代码 wince5.0平台以下或以上兼容 class CGPRS { public: CGPRS(); virtual ~CGPRS(); BOOL GPRS_Init(LPCTSTR Port, int BaudRate, DWORD UserParam); // GPRS 回调函数 typedef void (CALLBACK *ONGPRSRECV)(DWORD UserParam, DWORD Status, CString strData); ONGPRSRECV OnGPRSRecv; BOOL GPRS_DialUp(CString strTelNum); BOOL GPRS_DialDown(void); BOOL GPRS_TakeTheCall(void); BOOL GPRS_HangUpTheCall(void); BOOL GPRS_DeleteShortMsg(DWORD num); BOOL GPRS_ReadShortMessage(DWORD num, CString *strTelCode, CString *Msg); BOOL GPRS_SendShortMessage(CString strTelNum, CString Msg); BOOL GPRS_SetShortMSGCenterTel(CString strTelNum); BOOL GPRS_CheckMsgNum(CString *strNum, CString *strTotal); private: CCeSerial *pCeSerial; DWORD m_UserParam; /* 使用本模块用户 */ HANDLE m_ATCmdRespEvent; /* AT 命令回复事件 */ CString m_strRespBuf; /* 回复缓冲区字符串 */ DWORD m_RespCnt; BOOL bSendATCmd; /* 是否发送了命令 */ void ResetGlobalVarial(void); BOOL GPRS_SendATCmd(CString strCmd); /* 发送 AT 命令 */ BOOL GPRS_WriteMsg(CString Msg); /* 发送短信内容 */ BOOL GPRS_WaitResponseOK(void); /* 等待 AT 命令的响应 */ CString GPRS_GetTheCallNum(CString str); /* 获取打进来的电话的号码 */ //int FindMsgPos(void); /* 查找短信的位置 */ int FindMsgPos(int *posnum, int *numlen, int *posmsg, int *msglen); static void CALLBACK OnCommRecv(DWORD UserParam, BYTE *buf, DWORD buflen); };

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧