所以我有以下代码:
void Start(int &year, string &mon, char &nyd)
{
printf("%s", mon);
int month= atoi(mon.c_str());
printf("%i", month);
}
当传入的参数是“03”(第一个printf显示03)时,我每月得到0。
但是,如果我添加这一行
mon = "03";
我得到3,这是正确的,一个月。
为什么...... ????
编辑:我明白了。你们是对的。请勿使用scanf进行字符串输入。
答案 0 :(得分:3)
你不能在printf函数中用%s
打印std :: string,试试这个:
void Start(int &year, const std::string &mon, char &nyd)
{
std::cout << mon << std::endl;
int month= atoi(mon.c_str());
std::cout << month << std::endl;
}
或者
void Start(int &year, string &mon, char &nyd)
{
printf("%s\n", mon.c_str());
int month= atoi(mon.c_str());
printf("%i\n", month);
}
但是std :: cout优于C printf函数。
另外不要将scanf与std :: string一起使用,使用std :: cin而不是scanf,std :: cout而不是printf。