2015-09-19 80 views
-3

我正在做一个聊天的事情,当有人输入“%s”或“%s%s%s”时,每个人的客户端崩溃,继承人有点像我这样做。使用%s崩溃读取%s

const char* pszID = their id 
const char* pszName = their name 
const char* pszChatText = their raw message 

if (!pszID || !pszName || !pszChatText) 
return; 

std::string strChat; 
strChat.append("["); 
strChat += pszID; 
strChat.append(" :: "); 
strChat += pszName; 
strChat.append("] "); 
strChat += pszChatText; 

SendToServer(strChat.c_str()); 

这样,如果他们进入%s%S%S 的pszChatText为%s%s%S和崩溃。

,但我想它做它一般都喜欢,

[A48AJV :: thegamerman3000032] %s%s%s 

和sendtoserver是一个崩溃,它只是一个一个const char *的printf()的,我也检查,如果它是一个空指针

编辑:固定为指导

+5

如果客户端,当它接收到该消息崩溃,错误是在客户端接收消息。您粘贴的代码与处理接收消息的客户端无关。 –

回答

1

这听起来像你直接将字符串作为第一个参数传递到printf。不要这样做。这是因为第一个参数被解析为占位符。如果指定的占位符多于可变参数,则程序将崩溃。

改为提供"%s"作为第一个参数,将字符串作为第二个参数。

例如:

string chatMessage = "makeItCrash%s%s%s"; 
printf("%s", chatMessage); // program will not crash now 
+0

尝试使用'“%s”,strPushToConsole.c_str()'而没有'c_str()',但仍然崩溃时有人做%s作为他们的消息,它可以是我=? –

相关问题