memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。 其原型是:void* memset(void *_Dst, int _Val, size_t _Size)
_Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数。
例1:
char str[9];
我们用memset给str初始化为“00000000”,用法如下:
memset(str,0,8);
注意,memset是逐字节 拷贝的。
例2:
int num[8];
我们用memset给str初始化为{1,1,1,1,1,1,1,1},
memset(num,1,8);//这样是不对的
一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。
因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1,
即一个int变为0X00000001 00000001 00000001 00000001,显然,把这个数化为十进制不会等于1的。
2.strcpy和memcpy主要有以下3方面的区别。
2.1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2.2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
2.3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
注意:source和destin都不一定是数组,任意的可读写的空间均可。
sprintf_s是C++标准库中的一个函数,用于将格式化的字符串写入到一个缓冲区中。它的使用方法如下:
#include
int main() {
char buffer[100] = {'1','2'}; // 定义一个缓冲区
int num = 123; // 要写入的数字
const char* format = "The number is %d"; // 格式化字符串
// 将num写入缓冲区中,并按照指定格式输出
sprintf_s(buffer, sizeof(buffer), format, num);
printf("%s", buffer); // 输出缓冲区中的字符串
return 0;
}
string str1 = "1234567890";
cout << str1 << endl;
string tmp = "hello";
str1.insert(2, tmp);
cout << str1 << endl;
str1.erase(2, tmp.size()); // 删除tmp
cout << str1 << endl;
str1.erase(); // 清空str1
cout << str1.size() << endl;
cout << str1 << endl;
string res = "hello world";
string tmp = "12345";
res.replace(1, tmp.size(), tmp); // h12345world
cout << res << endl;
string str1 = "ehhe:haha:xixi:haha:heihei";
string tmp = "haha";
cout<<str1.find(tmp)<<endl; // 5
cout<<str1.find(tmp,10)<<endl; // 15
cout<<str1.compare("lala")<<endl;//-1
cout<<str1.compare("eh")<<endl;// 24
cout<<str1.compare("ah")<<endl;// 1
s.substr(pos, n)
返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
string str1 = "12345678";
string str2 = str1.substr(5, 6);
cout << str1 << endl; // 12345678
cout << str2 << endl; // 678