sprintf()访问冲突读取位置

时间:2014-09-17 21:14:35

标签: c++ printf access-violation

我真的不明白这一点,这里发生了什么:

char buffer1[100];
sprintf_s(buffer1, "whatever %s", "something");

工作得很好。

但是以下没有:

char buffer1[100];
sprintf_s(buffer1, "whatever %s %s", "something", "somethingelse");

错误:未处理的异常访问冲突读取位置0x00000005。

我认为如果我首先尝试用strcpy_s将其拆分,那么使用sprintf_s它会起作用,但这会浪费一切。

提前致谢。

PS:我正在使用Visual Studio

编辑: 代码更新,我写错了东西真的很快。以下是给出错误的实际代码:

sprintf(query, "INSERT INTO `members` (`id`, `username`, `email`) VALUES ('%s', '%s', '%s')", id, username, email);

1 个答案:

答案 0 :(得分:0)

问题是我试图使用%s将整数附加到char数组。 这个问题有两个解决方案,你可以使用%d或to_string来使整数成为一个字符串值来解决这个问题。

解决方案1:

 sprintf(query, "INSERT INTO `members` (`id`, `username`, `email`) VALUES ('%d', '%s', '%s')", id, username, email);

解决方案2:

sprintf(query, "INSERT INTO `members` (`id`, `username`, `email`) VALUES ('%s', '%s', '%s')", to_string(id).c_str(), username, email);