gpt4 book ai didi

c++ - strncpy 到已经创建的 char []

转载 作者:行者123 更新时间:2023-11-28 07:43:42 25 4
gpt4 key购买 nike

有课

class Cow{
char name[20];
char* hobby;
double weight;
public:
[..]
Cow & operator=(const Cow &c);
[..]
};

我想知道如何编写 operator= 方法的定义。我写的定义等于 -

Cow & Cow::operator=(const Cow &c){
if(this==&c)
return *this;
delete [] hobby;
hobby=new char [strlen(c.hobby)+1];
weight=c.weight;
strncpy(name,c.name,20);
return *this;
}

但是,如果已经创建了名称 [20],其中包含“Philip Maciejowsky”之类的名称,而我将其命名为“Adam”怎么办?在 operator=(...) 之后名称是否等于“adamlip Maciejowsky”?如果这样覆盖怎么办?

最佳答案

使用strcpy() 或在使用strncpy() 后添加空终止符。 strncpy() 不添加空终止符 (\0),而 strcpy() 会添加。

我的建议:使用 std::string 而不是 c-styled 空终止字符串。

when in rome, do the romans!


来自 http://cplusplus.com

No null-character is implicitly appended at the end of destination if source is longer than >num (thus, in this case, destination may not be a null terminated C string).

由于 Adam 的长度小于 Philip Maciejowsky - strncpy() 将不会填充剩余的目的地(即 Philip Maciejowsky) 与 \0。因此输出看起来像:

Adamip Maciejowsky - strcpy() 或执行 memset(destination, 0, lengthOfDestination) 然后调用 strncpy() 将导致您的输出也是 Adam。多种方式来完成您想要做的事情。

关于c++ - strncpy 到已经创建的 char [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com