ERROR 已弃用从字符串常量到 'char*' 的转换

ERROR deprecated conversion from string constant to 'char*'

本文关键字:char 转换 常量 字符串 ERROR      更新时间:2023-10-16

我被错误消息卡住了,不赞成从字符串常量转换为'char*'

我在这里试图做的是将"First"answers"Last"分配给cfoo1,并使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;
}

有两个问题:

  1. 使用字符串文字(类型为char const*)来调用需要char[]的函数。

  2. 正在尝试分配给char阵列。

修复:

  1. 将构造函数更改为:

    CFoo(char const* first, char const* last);
    
  2. 将其实现更改为:

    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] = ''
      strncat(m_first, first, BUF-1);
      m_last[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