CString strGray = _T("");
CString m_strR = _T("");
CString m_strG = _T("");
CString m_strB = _T("");
sscanf("169: 255 0 225","%[^ ]%s %s %s",strGray,m_strR,m_strG,m_strB);
int n = strGray.GetLength(); // 这里strGray为"255"
调试时发现运行最后一句int n = strGray.GetLength(); 后n的值居然为0,但是strGray却是"255",这是怎么回事呢?
我的编译环境是:VC 6.0+sp6, Win XP sp2。
7 个解决方案
#1
CString类中用一个成员变量表示字符串长度,GetLength就是返回这个变量的值。你上面的sscanf函数是把数据输入到了CString的缓冲区里面,而表示长度的成员并没有改变,所以会产生这种现象。你这样的做法是不对的,程序不能直接修改CString的缓冲区中的数据,应该定义一个字符数组来输入数据,完后再赋给CString。
#2
楼主多看看CString的源码。
#3
cnzdgs 学识渊博。字符串处理总是比较烦恼,不难,但细节很多。
#4
学习!
#5
学习
#6
学习了!
#7
CString strGray = _T("");
CString m_strR = _T("");
CString m_strG = _T("");
CString m_strB = _T("");
应该加这一句吧:
strGray.GetBufferSetLength(3);
sscanf("169:255 0 225","%s %s %s %s",strGray,m_strR,m_strG,m_strB);
在sscanf中为LPTSTR类型传递CString指针本身就是错误的,所以结果也是错误的,你可以试试GetBuff(),就知 道为什么错了
CString m_strR = _T("");
CString m_strG = _T("");
CString m_strB = _T("");
应该加这一句吧:
strGray.GetBufferSetLength(3);
sscanf("169:255 0 225","%s %s %s %s",strGray,m_strR,m_strG,m_strB);
在sscanf中为LPTSTR类型传递CString指针本身就是错误的,所以结果也是错误的,你可以试试GetBuff(),就知 道为什么错了
#1
CString类中用一个成员变量表示字符串长度,GetLength就是返回这个变量的值。你上面的sscanf函数是把数据输入到了CString的缓冲区里面,而表示长度的成员并没有改变,所以会产生这种现象。你这样的做法是不对的,程序不能直接修改CString的缓冲区中的数据,应该定义一个字符数组来输入数据,完后再赋给CString。
#2
楼主多看看CString的源码。
#3
cnzdgs 学识渊博。字符串处理总是比较烦恼,不难,但细节很多。
#4
学习!
#5
学习
#6
学习了!
#7
CString strGray = _T("");
CString m_strR = _T("");
CString m_strG = _T("");
CString m_strB = _T("");
应该加这一句吧:
strGray.GetBufferSetLength(3);
sscanf("169:255 0 225","%s %s %s %s",strGray,m_strR,m_strG,m_strB);
在sscanf中为LPTSTR类型传递CString指针本身就是错误的,所以结果也是错误的,你可以试试GetBuff(),就知 道为什么错了
CString m_strR = _T("");
CString m_strG = _T("");
CString m_strB = _T("");
应该加这一句吧:
strGray.GetBufferSetLength(3);
sscanf("169:255 0 225","%s %s %s %s",strGray,m_strR,m_strG,m_strB);
在sscanf中为LPTSTR类型传递CString指针本身就是错误的,所以结果也是错误的,你可以试试GetBuff(),就知 道为什么错了