C ++的atoi如何运作?

时间:2013-01-29 03:42:28

标签: c++ atoi

所以我有以下代码:

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进行字符串输入。

1 个答案:

答案 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。