gpt4 book ai didi

c - 为什么 puts 函数不适用于 C++ 中来自套接字的输入字符?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:24 24 4
gpt4 key购买 nike

这是我为运行登录管理器的服务器编写的代码,它登录恶意访问的文件并打印出错误登录的结果。字符 user 和 pass 来自使用套接字的用户输入。

if ((memcmp(user, "admin", strlen("admin")) == 0)) {
/*code... */
}
else {
char msg[600];
strcpy (msg,"Login error with ");
strcat (msg,"user: ");
strcat (msg,user);
strcat (msg," password: ");
strcat (msg,pass);
strcat (msg," from: ");
strcat (msg, client_ip);
puts (msg);
logfile->Write(msg);
return false;
}

嗯,问题在于输出控制台和日志文件中的输出。

像这样:

Login error with user: lol

password: asd

:��ܔ��P{w� from: 127.0.0.1

为什么会有奇怪的asci字符?由于它们来自套接字的用户输入,如何避免换行?

最佳答案

正如许多人评论的那样,这段代码不包含任何特定于 C++ 的内容,所以我的回答就好像您在使用纯 C 语言一样。

我猜,因为您在上面使用了 memcmp,所以您的输入字符串不是空终止的。 strcat 将继续从指针漫游到的任何地方附加 char,直到遇到 '\0'。如果要将用户或密码用作 C 样式字符串,则需要添加空终止符,否则使用 strncat并传递长度。

此外,请注意 msg 溢出。使用 snprintf 可能会有更好的运气格式化您的消息,因为它接受最大输出字符串长度。

关于c - 为什么 puts 函数不适用于 C++ 中来自套接字的输入字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733022/

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