我是否使用不正确strcpy_s
Am I using strcpy_s incorrectly?
我有一个名为"Person"的Person类的构造函数,它看起来像这样:
Person(const char * their_name, const char * email, int day, int month, int year)
: name(0), email_address(0), birthday(day, month, year) {
name = new char [strlen(their_name)+1];
strcpy_s(name, strlen(their_name) +1, their_name);
email_address = new char[strlen(email) + 1];
strcpy_s(email_address, strlen(email) + 1, email);
cout << "nPerson(...) FIRST CONSTRUCTOR CREATING: "<<name<<"n";
printOn(cout);
}
我在此类中有私有变量:
private:
char * name;
char * email_address;
Date birthday;
我认为这里有一个 off by 1 错误或其他东西,因为当我像这样测试我的构造函数时:
Person *p1 = new Person("Sarah", "iam@awesome.com", 2,2,1000);
这将打印到我的控制台:
Person(...) FIRST CONSTRUCTOR CREATING: Sarah
ààà
我不明白为什么它在构造函数运行后打印 a...任何人都可以看到问题吗?
编辑:我的打印方法。
/*print person on output stream o*/
virtual void printOn(ostream & o) const {
//print person
o << "………";
}
和覆盖的<<运算符
ostream & operator<<(ostream & ostr, const Person & p) {
p.printOn(ostr);
return ostr;
}
目前尚不清楚 printOn(cout) 函数在构造函数中做什么。难道是它的输出吗?
至于功能strcpy_s则无需使用它。使用旧的函数 strcpy 会好得多。在代码中,您调用 strlen 两次:一次是在分配内存时,第二次是在使用 strcpy_s 时。
您的输出使用的文本编码与编辑器不同。在代码编辑器中显示为…
的字符在打印出来时会变为à
。
一般来说,除非您知道如何选择正确的编码,否则不要使用高 ASCII 字符,否则事情不会像您想象的那样工作。
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 不正确的比较和交换计数器输出用于快速排序功能