|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<iostream>
- using namespace std;
- #include<string.h>
- class String
- {
- char name[256];
- public:
- String(char*str)
- {
- strcpy(name, str);//1
- }
- String() { }
- ~String() { }
- String operator+(const String&);
- void display()
- {
- cout << "The string is :" << name << endl;
- }
- };
- static char* str;
- String String::operator+(const String& a)
- {
- strcpy(str, name); //2
- strcat(str, a.name);//3 1、2、3错误提示: 不安全,建议用strcpy_s、stracat_s替换。我替换后,错误提示://没有与参数列表匹配的 重载函数 "strcpy_s" 实例
- // “strcpy_s” : 函数不接受 2 个参数
- //strcat也一样
- return String(str);
- }
- void main()
- {
- str = new char[256];
- String demo1("Visual c++"); //没有与参数列表匹配的构造函数 "String::String" 实例
- //“String::String(const String &)”: 无法将参数 1 从“const char[11]”转换为“char *”
- 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.";//没有与这些操作数匹配的 "+" 运算符
- // 二进制“ + ”: 没有找到接受“const char[13]”类型的右操作数的运算符(或没有可接受的转换)
- demo4.display();
- delete str;
- }
复制代码
这个能在VC6.0中不出错,在VS2017就出现上面的问题
请问该怎么修改?
本帖最后由 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; //规范写法
- }
复制代码
|
|