为什么strcpy只复制有限数量的元素:

时间:2012-05-29 23:32:35

标签: c++ codeblocks strcpy strncpy

C ++新手在这里。写一个简单的程序。一切正常,除非我尝试提取名字和姓氏并单独打印时,姓氏中打印的字母数量始终与名字中的数字相同。因此,如果名称是jackson,程序将打印firstname为:will和second name as:jack。我该如何解决这个问题?

这是代码

for( i = 0; i < 19; i++)
  if(cAddress[i] == ' ' || cAddress[i] == '_' || cAddress[i] == '-' || cAddress[i] == '.')
    break;

strncpy(cFirst, cAddress, i);

cFirst[i] = '\0';
cout << endl << "\n";
cout << "Your first name is " << cFirst << endl;

strcpy(cSur,cAddress + i + 1);
cSur[i] = '\0';
cout << endl;
cout << "Your surname is " << cSur << endl;

3 个答案:

答案 0 :(得分:2)

你正在第(i + 1)个位置添加一个\0字符 - 这标志着字符串的结束,所以它打印出来。在该行之前,cSur可能包含整个姓氏。

答案 1 :(得分:2)

您的大多数代码看起来很像C - 甚至没有充分利用C标准库。在C ++中,我写的更像是:

int pos = Address.find_first_of(" _-.");

std::string FirstName(Address, 0, pos);
std::string SurName(Address, pos);

如果由于某种原因,您坚持使用C样式字符串,您可以考虑从strpbrk开始查找分隔符。

答案 2 :(得分:0)

cSur[i] = '\0';

不正确。我是名字的长度。 cSur已经被strcpy终止。

解释一下,Jerry Coffin的回答是我推荐的好c ++代码。