为何字符串的长度为0

时间:2022-12-30 21:14:55
     有这样一段测试代码:


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(),就知   道为什么错了

#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(),就知   道为什么错了