编译器对代码的优化方式不同导致的bug

先来看代码:

	char fileName[260]{ 0 };
	string name("lalab");
	strncpy_s(fileName, name.c_str(), name.length());
	if (fileName[10] == '\0')
	{
		printf("a");
	}
	else
	{
		printf("b");
	}

按说fileName在初始化时已经将260字节全部填充为0了,VS编译器的release模式下fileName[10]是0,但debug模式下却是-2。

为了避免类似问题,可以在strncpy_s后加一句:

memset(fileName + name.length(), 0, sizeof(fileName) - name.length());

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注