我用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)'的参数太少。有人可以解释一下我做错了吗?
答案 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