c++ std::memset学习

风格不统一 提交于 2019-11-27 03:28:55

std::memset功能

memset(void* a,int b,int c)
a表示初始化的对象 b表示初始化值 c表示初始化字节数
memset的方便之处在于可以将复杂的数据结构简洁得初始化

初始化数组

int main() {
	int buffer[10];
	int n = 10;
	int charTemp = 1;
	int position = 0;
	int arg = 0;
	for (int i = 0;i < n;i++) {
		std::memset(buffer, arg, sizeof(int) * 10);
		buffer[position] = charTemp++;
		for (auto& e : buffer) {
			std::cout << e << "  ";
		}
		std::cout << "\n";
	}
	return 0;
}

在这里插入图片描述

初始化集合

int main() {
	std::vector<int> buffer(10, 2);
	int n = 10;
	int charTemp = 1;
	int position = 0;
	int arg = 0;
	for (int i = 0;i < n;i++) {
		std::memset(buffer.data(), arg, sizeof(int) * buffer.size());
		buffer[position] = charTemp++;
		for (auto& e : buffer) {
			std::cout << e << "  ";
		}
		std::cout << "\n";
	}
	return 0;
}

在这里插入图片描述

初始化对象

int main() {
	struct Person {
		int age = 20;
		std::string name = "GG";
	};
	Person firstPerson;
	std::memset(&firstPerson, 0, sizeof(struct Person));
	firstPerson.age = 10;
	Person secondPerson;
	std::memset(&secondPerson, 0, sizeof(struct Person));
	secondPerson.name = "G";
	std::cout << " firstPerson.age   " << firstPerson.age << "   firstPerson.age  " << firstPerson.name << "\n";
	std::cout << " secondPerson.age   " << secondPerson.age << "  secondPerson.name  " << secondPerson.name << "\n";
	return 0;
}

在这里插入图片描述

std::memset的坑

memset一般只用于初始化不能用于字符替代转换

int main() {
	int buffer[10];
	int n = 10;
	int charTemp = 1;
	int position = 0;
	int arg = 1;
	for (int i = 0;i < n;i++) {
		std::memset(buffer, arg, sizeof(int) * 10);
		buffer[position] = charTemp++;
		for (auto& e : buffer) {
			std::cout << e << "  ";
		}
		std::cout << "\n";
	}
	return 0;
}

在这里插入图片描述
具体原理我也是论坛学习的,下面贴图,感谢这位朋友
在这里插入图片描述
也感谢这篇博文的发布者:https://blog.csdn.net/qq_42592097/article/details/81947072

第三个参数

项目文件读取时候,有朋友可能会这么写

std::ifstream is(filename);
std::vector<char> buffer(1024, 0);
while (!is.eof()) {
		std::memset(buffer.data(), 0, buffer.capacity());
		...
}

这里buffer.capacity()是可以的,因为本来char是一个字节,但是实际应该是sizeof(char)*buffer.capacity()
一般写作sizeof(buffer)即可

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!