我在类中声明如下:
wchar_t s[100];
int nFormat;
构造函数中如下
nFormat = 5;
wcsset(s,wchar_t(0));
构造函数执行后nFormat的值为0,怎么回事啊,是不是wcsset()太强了,所有成员变量都会被重置

解决方案 »

  1.   

    1 wcsset是用于初始化Unicode字符串的,第二个参数似乎应该是_T('0')2 建议你用memset,可以这样调用:memset(s, 0, 100 * sizeof(wchar_t));
      

  2.   

    memset和wcsset不是说是一样的,只是wcsset用在unicode的,我用wcsset(s,wchar_t('\0'))也是一样
      

  3.   

    wchar_t s[100];wcsset(s,0); 
      

  4.   

    1 wchar_t(0)是强制类型转换,把一个int型数据转换为宽字符型,这里本身就有问题;2 wcsset的作用是“Set characters of a string to a character”,也就是说它会把 s 看作一个指向Unicode字符串的指针一直清零下去,直到遇到"\0\0"标志为止,这样,为什么 nFormat 一块儿被清零了也就不难理解了吧?所以建议楼主还是用memset吧。
      

  5.   

    强烈建议不要使用strset, wcsset等字符串函数,使用memset代替他们。
    我再使用strset的时候也出过类似的问题,虽然wcsset的功能是与memset的功能一致,但是谁知道他们在实现的时候有什么差别呢?wcsset我没有用过,但是strset确实遇到过类似的问题。一楼的方法是最好的。
      

  6.   

    memset 肯定不危险,除非你有危险的用法在有意或无意时。
    注意要计算好初始化首地址和长度。
      

  7.   

    好了,清楚了,谢谢danyueer(淡月儿:清水上的足音)也谢谢大家 ,不过强制转换0应该也是没有问题的吧,至少程序没有出现问题,0和'\0'其实就是一样的吧。
    还有问一下,我使用wcscspn(s,"^")的时候,如果没有^,返回的就是'\0'的地方,不是0啊,是不是查找的时候"^"字符串中的'\0'也算上了?