memset

今天做在线测评,判断两个string修改字符位置后是否能变成同一字符串

class Same {
public:
    bool checkSam(string stringA, string stringB) {
        unsigned int lenA=stringA.size();
        if(lenA!=stringB.size())
            return false;
        int arrayA[256];
        for(int i=0;i<256;i++)
            arrayA[i]=0;
//      memset(arrayA,0,256);
        for(unsigned int i=0;i<lenA;i++){
            arrayA[stringA[i]]++;
            arrayA[stringB[i]]--;      
        }
        for(unsigned int i=0;i<256;i++)
            if(arrayA[i]!=0)
                return false;
        return true;
    }
};

用上式的memset的时候显示测试用例不过,修改成for循环赋值后马上通过,然后查了一下memset的用法,

发现是第三个参数错误,修改成

memset(arrayA,0,sizeof(int)*256)

修改之后arrayA中数都变成0值,但是若写成

memset(arrayA,2sizeof(int)*5)

arrayA的元素全部被初始化为

memset是按字节赋值的,sizeof(int)=4,每个int占四个字节,所以第一次将第三个参数设置为5

其实只给arrayA[0]赋0值,而上面用ASCII为2的字符填充,转化为二进制,一个字节为000000010,

四个字节就是00000010000000100000001000000010,等于33686018,这就是memset对数组的赋值.

extern void *memset(void *buffer, int c, int count)是在buffer中将前n个字节全部填充为c的ASCII值,是字符串函数。

一般第一个参数buffer是char*型的,char为一个字节。

用来初始化int数组时,可以初始化为 0 或者是 -1,其他值不可以。

 

posted @ 2015-08-17 15:14  Aspirin_J  阅读(202)  评论(0编辑  收藏  举报