![](/img/trans.png)
[英]Deprecated conversion from string constant to 'char*': Can't use the constant
[英]ERROR deprecated conversion from string constant to 'char*'
我被错误消息弃用,从字符串常量转换为'char *'
我在这里尝试执行的操作是为cfoo1分配“ First”,“ Last”,并使cfoo2等于cfoo1。 最后,将cfoo1和cfoo2显示到标准输出。
#include <iostream>
#include <cstring>
#include "cfoo.h"
using namespace std;
CFoo :: CFoo(char first[], char last[]){
m_first[BUF] = first[BUF];
m_last[BUF] = last[BUF];
}
void CFoo :: WriteFoo(){
cout << m_first[BUF] << ", " << m_last[BUF];
}
#ifndef CFOO_HEADER
#define CFOO_HEADER
#include <iostream>
#include <cstring>
using namespace std;
const int BUF = 256;
class CFoo{
public:
CFoo(char first[], char last[]);
void WriteFoo();
private:
char m_first[BUF];
char m_last[BUF];
};
#endif
#include <iostream>
#include "cfoo.h"
using namespace std;
int main(){
CFoo foo1("Jong", "Yoon");
CFoo foo2 = foo1;
cout << "foo1 = ";
foo1.WriteFoo();
cout << endl;
cout << "foo 2 = ";
foo2.WriteFoo();
cout << endl;
return 0;
}
有两个问题:
使用字符串文字(类型为char const*
)来调用需要char[]
的函数。
尝试分配给char
数组。
修正:
将构造函数更改为:
CFoo(char const* first, char const* last);
将其实现更改为:
CFoo(char const* first, char const* last) { // Make sure to copy at most BUF-1 characters // to m_first and m_last. m_first[0] = '\\0' strncat(m_first, first, BUF-1); m_last[0] = '\\0' strncat(m_last, last, BUF-1); }
您还需要更改CFoo::WriteFoo()
以使用整个字符串
void CFoo::WriteFoo()
{
cout << m_first << ", " << m_last;
}
也,
访问m_first[BUF]
或m_last[BUF]
是错误的,因为访问这些数组的有效索引的最大值为BUF-1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.