sprintf() 在 VS2008 中给出访问冲突错误

sprintf() is giving Access Violation Error in VS2008

本文关键字:访问冲突 错误 VS2008 sprintf      更新时间:2023-10-16

我在通过VS2008运行应用程序时遇到问题。我已经调试了代码,发现问题出在sprintf().我收到以下错误

在澄清.exe 0x005251d2处未处理的异常: 0xC0000005:访问冲突读取>位置0xffffffd4。

执行以下行时

static char buf[512]; 
char time_buf[100];
sprintf(buf, 
"EVENT_TIME %5.2f DOING 'LOGIN EVENT' on 'Session Login' LEVEL 1 n AT %s nn",
seconds, time_buf);

我也尝试过_snprintf()但面临同样的问题。

秒是浮点类型吗?你为什么不把它分成更小的部分?第一次尝试:

sprintf(buf, "test");

然后:

sprintf(buf, "test %s", time_buf);

然后:

sprintf(buf, "test %5.2", seconds);

我认为您在这种情况下的问题是使用数组进行写入。

调试表明,您的代码只会将time_buf的第一个元素写入buf,其余内容将被忽略。

Eclipse忽略了这一事实,并没有给我任何类型的警告或错误,但也许VS在这种情况下有一些其他限制。

你可以做类似的事情

char buf[100];
char* temp;
temp = "--> Some Content <--";
sprintf(buf, "%s", temp);

这会将完整内容复制到缓冲区,但如果您可以在您的情况下使用它,这取决于您。