[英]Unexpected characters in console output
我正在为Crysis Wars游戏编写一个新的服务器 - 客户端网络。 我有一个函数将字符串居中到控制台窗口中每行支持的字符数。 该窗口适合113个字符,但我已将函数中的最大字符宽度设置为111
,以便很好地适应文本。
这是我的功能:
string Main::CenterText(string s)
{
return string((111 - s.length()) / 2, ' ') + s;
}
这个功能来自我去年提出的一个问题 ,但我不确定我是否最终在过去的项目中使用它。
我试图在此上下文中使用此函数( CryLogAlways
函数只是将字符串记录到游戏/服务器日志文件并打印它):
CryLogAlways(CenterText(" ____ ____ _ __ _ _ __").c_str());
CryLogAlways(CenterText(" / _/__ / _(_)__ (_) /___ _( )| |/_/").c_str());
CryLogAlways(CenterText(" _/ // _ \\/ _/ / _ \\/ / __/ // //_> < ").c_str());
CryLogAlways(CenterText("/___/_//_/_//_/_//_/_/\\__/\\_, / /_/|_| ").c_str());
CryLogAlways(CenterText(" /___/ ").c_str());
但输出是:
同样,@ deW1请求,我有一个类似的输出与CryLogAlways(CenterText("X").c_str());
:
为什么我得到这个输出,我该如何解决这个问题?
您正在使用不合格的类型string
。 我假设你在某处using namespace std
( 反对最佳实践 ),这会使string
引用std::string
。 但显然情况并非如此,并且您将非限定名称string
定义为某些内容 (问题未显示内容),其行为类似于std::string
(即它具有.length()
和.c_str()
)。 但是,这个东西的构造函数参数似乎与std::string
参数相反。
如果您希望您的函数使用标准库字符串,请明确说明:
std::string Main::CenterText(std::string s)
{
return std::string((111 - s.length()) / 2, ' ') + s;
}
这是为什么对std
类型使用显式限定是一个非常好的主意的一个主要例子。
根据C ++ Reference ,你是对的。
正如评论中所指出的,对于您使用的字符串实现,参数将被切换。
对于第二个示例,您打印符号(111-1)/ 2 = 55 ='7'表示''= 32次。 将参数交换为
string(' ',(111 - s.length()) / 2)
它应该更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.