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,2,sizeof(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,其他值不可以。