“函数'char * strncpy(char *,const char *,size_t)'的参数太少'是什么意思?

时间:2012-05-29 10:54:06

标签: c++ compiler-errors

我用c ++编写代码,非常简单。

using namespace std;

int main(){
    char cName[30], cFirst[15], cSur[30];


    cout << "Enter your name: " << endl;
    cin.getline(cName, 29);


    for( int i = 0; i < 29; i++)
      if(cName[i] == ' ')
       break;

    strncpy(cFirst, cName, i);


    cFirst[i] = '\0';
    strncpy(cSur,cName + i + 1);
    cSur[i] = '\0';
    cout << cSur << endl;
    return 0;
}

然而,程序停止在strncpy(cFirst, cName, i);进行编译,我收到此错误消息“函数'char * strncpy(char *,const char *,size_t)'的参数太少。有人可以解释一下我做错了吗?

3 个答案:

答案 0 :(得分:8)

strncpy()有三个参数,第二个调用只提供了两个参数:

strncpy(cSur,cName + i + 1);

由于这是C ++,请考虑使用std::string而不是char[](或char*)。有std::getline()版本以std::string为参数并填充它,无需固定长度数组。然后,您可以使用std::string::find()std::string::substr()将该行拆分为名字和姓氏:

std::string full_name("john prog rammer");

const size_t first_space_idx =  full_name.find(' ');
if (std::string::npos != first_space_idx)
{
    const std::string first_name(full_name.substr(0, first_space_idx));
    const std::string surname(full_name.substr(first_space_idx + 1));
}

答案 1 :(得分:4)

很明显,如果你问我,你只提供2个参数而不是3:

strncpy(cSur,cName + i + 1);

答案 2 :(得分:2)

它抱怨它接受了3个参数,但你没有提供3个。

会是这一行:

strncpy(cSur,cName + i + 1);

这里你只提供2,因为你将i和1添加到cName