|
发表于 2020-2-22 23:04:25
|
显示全部楼层
本楼为最佳答案
本帖最后由 major_lyu 于 2020-2-22 23:49 编辑
你修改后的代码啥样子?是不是strcpy_s 和strcat_s两个函数参数没给对?
这两个函数都需要输入三个参数的.
strcpy_s(s1, n, s2); 将字符串s2的内容复制到字符串s1中, n位需要复制的字符数.通常为strlen(s2)+1;
strcat_s(st1,n,str2);将str2的内容拼接到str1. 参数n表示字符串str1能存放的字符数目.
你再好好检查一下
这是我帮你修改后的代码:
- #include<iostream>
- using namespace std;
- #include<string.h>
- class String
- {
- char name[256];
- public:
- String(const char str[]) // 参数修改为const char str[]; 不让代用String("XXXX"),会有报错或者warning。因为双引号定义的字符串常量“xxxxzx”的首地址是字符串常量指针
- {
- strcpy_s(name, strlen(str)+1, str);//1 //////正确的调用strcpy_s()
- }
- String() { }
- ~String() { }
- String operator+(const String&);
- void display()
- {
- cout << "The string is :" << name << endl;
- }
- };
- static char* str;
- String String::operator+(const String& a)
- {
- strcpy_s(str,strlen(name)+1, name); //2 //////正确的调用strcpy_s()
- strcat_s(str,256, a.name);//3 //////正确的调用strcat_s(); 第二个参数256是目标字符串的容量,你main()中定义的是256,所以我就写了这个。
- return String(str);
- }
- int main() // 规范写法
- {
- str = new char[256];
- String demo1("Visual c++"); //没有与参数列表匹配的构造函数 "String::String" 实例
- //“String::String(const String &)”: 无法将参数 1 从“const char[11]”转换为“char *” ------------//将构造函数修改为String(const char* str)或者String(const char str[])
- String demo2("6.0"); //没有与参数列表匹配的构造函数 "String::String" 实例
- //“String::String(const String &)”: 无法将参数 1 从“const char[4]”转换为“char *” -----------------同上
- demo1.display();
- demo2.display();
- String demo3 = demo1 + demo2;
- demo3.display();
- String demo4 = demo3 + " Programming."; //没有与这些操作数匹配的 "+" 运算符
- demo4.display();
- delete str;
- return 0; //规范写法
- }
复制代码 |
|