sprintf()访问读取位置时发生冲突

sprintf() access violation reading location

本文关键字:冲突 位置 读取 访问 sprintf      更新时间:2023-10-16

我真的不明白,下面是发生的事情:

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);

问题是我试图使用%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);