gpt4 book ai didi

Windows 2008 服务器上的 C++ fputs 断言

转载 作者:行者123 更新时间:2023-11-28 08:27:59 38 4
gpt4 key购买 nike

在下面的代码中,fputs(...) 在 Windows Server 2008 上运行时抛出一个断言。我在 Vista 或 XP 机器上没有这个问题。我不知道是什么原因造成的?

断言是:Stream != NULL

它似乎也是随机的,因为有时它似乎会成功......随着日志文件的创建。

有人可以帮忙吗?

void DLog::Log(const char *fmt, ...)
{
va_list varptr;

va_start(varptr, fmt);

int n = ::_vscprintf(fmt, varptr);
char *buf = new char[n + 1];
::vsprintf(buf, fmt, varptr);

va_end(varptr);

if (!m_filename.empty())
{
FILE *f = fopen(m_filename.c_str(), "at");
if (f != NULL)
{
fputs(buf, f);
fputs("\n", f);
fclose(f);
}
else
::MessageBox(0,"Error at fputs in Log","Error",0);
}


delete [] buf;
}

最佳答案

断言的是第二个 fputs 吗?您的 vsprintf 是否可能超出缓冲区的末尾?您的格式字符串和实际可变参数可能不正确匹配。

您的问题被标记为 C++,并且肯定有更好的方法可以用该语言完成此任务。

至少考虑使用 std::ofstream 代替旧的 C FILE* API 进行编写。但更好的办法是完全忘记 varargs 函数并使用像 C++ 标准流这样的插入运算符。然后您将获得类型安全性,并消除了对容易错误传递的可变参数的需要。

关于Windows 2008 服务器上的 C++ fputs 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265763/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com