0

我试图在使用后释放一个字符指针,但它返回一个奇怪的错误。

错误说:

_CrtDbgREport:字符串太长或 IO 错误

调试器本身在编译时不返回错误。

目前的代码如下所示:

void RespondToUser(SOCKET client, SOCKET server)
{
    char buffer[80];
    char *temp = malloc(_scprintf("HTTP/1.1 200 OK\r\n%s\r\nServer: %s\r\nConnection: close\r\n\r\nHi!", buffer, SERVER_NAME));
    sprintf(temp, "HTTP/1.1 200 OK\r\n%s\r\nServer: %s\r\nConnection: close\r\n\r\nHi!", buffer, SERVER_NAME);

    send(client, temp, strlen(temp), 0);
    closesocket(client);
    free(temp);
    ListenToUsers(server);
}

仅当我尝试从内存中释放临时指针而不是其他情况时才会出现此问题。这可能是什么原因造成的?

4

1 回答 1

1

调用sprintf()是在末尾写一个(因为它附加了一个 NULL 终止符),因为 from 的返回值_scprintf()不包括 NULL 终止符。从_scprintf()参考页面:

如果要使用指定的格式代码打印或发送到文件或缓冲区,则返回将生成的字符数。返回的值不包括终止空字符。

这意味着程序具有未定义的行为。更正+ 1_scprintf()s 返回值。

于 2012-11-17T22:57:53.347 回答